Maven学习总结
简介
Maven有两大功能: 一个是jar管理(也可称依赖管理), 另一个是一键部署(需要配合插件来使用).
Maven的使用主要是围绕配置文件:pom.xml
. 该文件主要的有两部分, 一个是依赖管理, 包含在<dependencies>
标签中; 另一个是插件管理, 包含在<plugins>
标签中. 一个简单web项目pom.xml
文件中这两部分的配置如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
</configuration>
</plugin>
</plugins>
</build>
在该文件中配置了3个jar包分别是用于测试的的junit
, 用于编写servlet
的serverlet-api
, 以及编写jsp
的jsp-api
; 同时该文件还配置了两个插件, 一个是maven的jdk插件maven-compiler-plugin
, 配置的jdk版本是1.8, 另一个是maven的tomcat插件tomcat7-maven-plugin
.
解决jar包冲突
在上面的pom.xml
中, 对两个jar包都增加了<scope>provided</scope>
:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
这是为了让这2个jar只在编译与测试时使用, 而在运行时不使用. 如果运行时依然提供这两个jar包, 就会存在相同的jar包发生jar冲突. 这是因为在运行时插件tomcat7-maven-plugin
也提供了这两个jar. 下面是该插件的具体配置信息:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
注意: 如果在idea中新建的module会自动依赖project的jar包, 如果存在module与project中依赖了相同的jar, 也会发生jar包冲突.
jar包管理中的依赖范围
在上文中为解决jar包冲突, 为这两个jar包设置了<scope>provieded</scope>
, 其中的provieded
就是指jar包管理中的依赖范围. 一共有5种依赖范围, 他们分别是complie
, test
, provieded
, runtime
, system
. 默认是complie
.
增加<repositories>标签
maven存放jar包的仓库有本地仓库与远程仓库, 当本地仓库没有对应的jar包时, maven会从远程仓库下载jar包, 这些仓库的配置信息存放在maven安装目录下的etc/conf.xml文件中. 但有时候我们会为项目单独设置远程仓库, 这时就需要在pom.xml添加一个<repositories>
标签, 其基本格式如下
<repositories>
<repository>
<id>远程仓库唯一标识符</id>
<url>远程仓库的url</url>
</repository>
</repositories>
Maven 进阶: 继承与聚合
Maven还能够管理项目的层级关系, 父项目需要在pom.xml中设置打包方式为pom.
补充
Maven相比idea的优势
idea本身也有依赖管理, 也能够对web工程进行一键部署, 那为什么还需要使用Maven.
- 更灵活的jar包管理, 比如配合使用Maven的继承机制.
- 方便团队协作, 通过
pom.xml
文件就能实现项目环境的搭建, 无论在idea还是eclipse中都能使用.
idea中配置Maven的3要素
- Maven setting.xml文件位置, idea中file->setting搜索"maven":
- 本地仓库路径配置,在setting.xml中配置如下:
- 远程仓库:阿里云远程(默认为maven官方远程仓库, 下载速度慢), 在setting中配置如下:
idea中加载Maven项目
在Maven项目中选择添加, 之后选择一个Maven项目文件夹中的pom.xml文件就可以.