前面学习使用的servlet、jdbc等技术是最原生态的,代码实现比较繁琐,如果在企业级开发中使用这样的技术,那么工作量就会非常大。
那么怎么来解决这个问题呢?
使用框架,在java后端有许多的框架技术,例如mybatis、spring系列框架,可以大大提高开发效率。
框架其实就是对一些基础的功能进行封装(封装到了jar包中),让程序员可以在此基础上进行快速开发
例如:盖房子——>框架结构(主体、基础功能、水电气网...)——>在此基础上施工
像一些简单的项目做完大约需要用到70个jar包,像商业级项目,使用的组件更多,大约会用到100多个jar包,框架就可以帮助我们管理这些jar包
所以我们接下来学习的主题是:进一步接近企业级开发
maven 还未出世的时候,我们有很多痛苦的经历。
痛点 1:jar 包难以寻找
痛点 2:jar 包依赖的问题
痛点 3:jar 不方便管理
痛点 4:项目编译
Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,用来帮助开发者管理项目中的 jar包,以及 jar包之间的依赖关系、完成项目的编译、测试、打包和发布等工作。
简单来说就是一款在开发期间,为程序员提供的一款项目管理工具(包含项目中的jar、编译、打包)
2.1 Maven 中的概念
maven官方提供了一个专门存储jar的仓库,不同的开发者,或者框架的官方将这些jar上传到maven官方提供的仓库中,在仓库中,每一个jar都有一个唯一的位置,统一管理这些jar,其他开发者如果需要使用,只需要知道自己使用的jar包在maven仓库中的位置即可。
只需要借助maven,输入jar包地址,maven工具就会自动从maven仓库下载jar
Pom(Project Object Model 项目对象模型)
Maven 管理的项目的根目录下都有一个 pom.xml 文件,pom.xml 文件用来指示Maven 如何工作。
在 pom.xml 文件中配置项目基本信息以及项目构建信息等。
比如:项目坐标、项目依赖的 jar、插件、编译选项等。
一旦在 pom.xml 文件中配置了所依赖的 jar,Maven 会自动从构件仓库中下载相应的构件。
2.2 项目坐标
maven 给每个 jar 定义了唯一的标志,这个在 maven 中叫做项目的坐标,通过这个坐标可以找到我们需要用到的任何版本的 jar 包。
也就是jar包在仓库中的位置
groupId、artifactId、packaging、version 的组合被称为项目的坐标,它们形成了项目的唯一标识,Maven通过坐标来精确定位构件。其中 groupId、artifactId、version 是必须的,且这三项的值必须唯一,packaging 是可选的(默认为 jar)。
2.3 仓库
存放jar包的地方,中央仓库全球共享,先将 jar 从中央仓库下载到本地仓库,然后在项目中引用本地仓库的 jar。
在全球各地还有中央镜像仓库(也可以理解为备份),我们接下来要使用的就是阿里云镜像仓库
本地仓库(在自己的电脑上)
第一次在项目中要使用jar包,这时候本地仓库是没有的,他就会去中央仓库或中央镜像仓库中去下载(默认是去中央仓库下载,如果我配置的时中央镜像仓库,那就会去中央镜像仓库下载,不管是在哪下载,都会下载到本地仓库),下次在项目中使用的时候,现在本地仓库找,本地仓库如果有,他就不会再去中央仓库或者中央镜像仓库中找,而是直接引用本地仓库中的jar包。
使用前提:
安装 jdk ,maven是依赖于jdk的
保证网络的通畅,Maven 工作时需要通过网络下载各种插件以完成任务,第一次下载jar包需要从中央仓库或镜像仓库下载
3.1 下载 maven 服务器
maven 官网:Maven – Welcome to Apache Maven
这里我们下载的版本为3.6.0
点击 download 进行下载,如下图
3.2 安装,配置maven
1.点击下载二进制的 apache-maven-3.6.0-bin.zip 进行解压,然后在系统环境中配置环境变量,在path中配置到bin目录:
2.配置成功后输入命令mvn -version查看版本如下图:
在cmd输入命令:mvn -version
查看结果如上图,表示 maven 环境配置成功。
3.配置本地仓库地址
接下来根据情况在本地磁盘中建立通过 maven 下载后 jar 文件所存储的文件夹,一般我们称为”仓库(repository)”;最终是如何将下载的 jar 文件存储到我们指定的仓库中呢?
需要在 maven 的服务器解压的文件中找到 conf 文件夹下的settings.xml 文件进行修改,如下图所示:
建议先将 settings.xml 文件备份,以免出现错误
①配置本地仓库位置:
这里配置的位置需要在对应目录创建文件夹
②配置阿里云 maven 镜像仓库,下载速度更快
- <mirror>
- <id>alimavenid>
- <name>aliyun mavenname>
- <url>http://maven.aliyun.com/nexus/content/groups/public/url>
- <mirrorOf>centralmirrorOf>
- mirror>
如下图所示:
3.3 idea 中设置 maven
3.4 创建 maven 工程
创建新项目:
选择java企业级项目:
选择Web Profile:
设置项目名以及源代码存放位置等:
因为我们是第一次使用,所以它会自动下载maven的一些插件:
自动下载到我们的本地仓库中:
到此我们的一个maven工程就创建成功了。
maven 仓库官网(http://mvnrepository.com/)如下图所示:
在此官网就可以下载自己所需开发 jar 包,继续点击链接打开如下:
在搜索框中输入要下载的jar包:
点击进去后选择需要的版本:
例如我们选择8.0.16这个版本,点击进入:
将坐标粘贴到dependencies中,点击刷新下载:
这个jar包就会从中央仓库下载到我们的本地仓库中:
maven会自动将这个jar包及其依赖的jar包自动下载到我们的项目中,这就叫管理我们项目中的jar以及jar之间的依赖关系:
注意:首次使用一个jar包时,它会从中央仓库下载到我们的本地仓库中,以后在其它项目中如果要用这个jar包,我们只需要在项目中配置jar包的坐标,它就会直接从本地仓库中加载,就不用在中央仓库重新下载了。
例如下载 servlet jar 包
在 Pom.xml 文件配置 jar 包信息,使用 maven 自动下载 jar 包管理 jar 之间的依赖
- <dependency>
- <groupId>commons-fileuploadgroupId>
- <artifactId>commons-fileuploadartifactId>
- <version>1.3.1version>
- dependency>
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>3.1.0version>
- <scope>providedscope>
- dependency>
各个子元素功能解释:
各个取值及含义如下:
compile:编译时和运行时依赖。如果你的项目最终打包为 war 包,则该依赖包会被拷贝到 war 包中的 lib 目录中。
provided:编译项目主代码和测试代码时使用此依赖项,运行时由 jre 或 web容器提供。如果你的项目最终打包为 war 包,则该 jar 包不会被打包。
pom.xml内容介绍:
- "1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0modelVersion>
-
- <groupId>com.examplegroupId>
- <artifactId>mavenDemoartifactId>
- <version>1.0.0version>
- <name>mavenDemoname>
- <packaging>warpackaging>
-
-
- <properties>
-
- <maven.compiler.target>1.8maven.compiler.target>
- <maven.compiler.source>1.8maven.compiler.source>
- <junit.version>5.6.2junit.version>
- properties>
-
-
- <dependencies>
-
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>8.0.16version>
- dependency>
-
- <dependency>
- <groupId>commons-fileuploadgroupId>
- <artifactId>commons-fileuploadartifactId>
- <version>1.3.1version>
- <type>jartype>
- <scope>compilescope>
- dependency>
-
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>3.1.0version>
- <scope>providedscope>
- dependency>
- dependencies>
-
- <build>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-war-pluginartifactId>
- <version>3.3.0version>
- plugin>
- plugins>
- build>
- project>
1. compile 编译
使用maven命令同样可以:
2. clean 删除 target
使用命令清除:
3. package 打包
打开可以看到有一个lib文件,里面有我们的jar以及jar依赖,没有servlet,因为servlet是provided,只是本地编译需要:
4. install 把项目 install 到本地仓库
这里举个例子:比如说我们专门创建一个项目(可以理解为一个构建/组件),将我们平时写的一些工具类放进去,这时我们如果要在其它项目中使用,就需要在仓库中引用,这时就要使用install命令,将该项目安装到我们的本地仓库中,以便其它项目使用。
执行命令后可以看到我们的项目被打包安装到了本地仓库中:
这时我们在其它项目中就可以将我们自己制作的本地仓库的组件依赖进去使用了:
- <dependency>
- <groupId>com.examplegroupId>
- <artifactId>myUtilartifactId>
- <version>1.0-SNAPSHOTversion>
- dependency>
测试:可以看到在其它项目中就可以调到我们在内个组件中写的方法了
注意:package和install 的区别:
package只是本地进行打包,install会把组件打包安装到我们我们的本地仓库中
5. test 运行测试代码