Maven是用来能够管理项目的构建、报告和文档的软件项目管理工具。
下载地址:http://maven.apache.org/download.cgi
安装好之后可以执行mvn –version来查看信息
1.pom.xml文件
<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.0</modelVersion>
<groupId>com.x</groupId>
<artifactId>rx.h2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>rx.h2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
节点 | 描述 |
---|---|
groupId | 标识符,对应工程结构。 |
artifactId | 标识符,对应工程名。 |
version | 工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。 |
packaging | 分为pom、jar、war |
properties | 类似常量,pom中可以引用 |
2.常用命令
命令 | 描述 |
---|---|
compile | 编译工程源码 |
test | 测试。 |
test-compile | 编译测试,并执行测试 |
package | 按照设置的格式进行打包,如 JAR、WAR |
install | 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。 |
deploy | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。 |
clean | 清理 target |
clean package | 清理并打包 |
3.生成sources and javadocc 配置 plugins参考
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 源码包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<!--jar-no-fork 目标能够将项目打包成source jar文件,在packge阶段执行-->
<phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
<goals>
<goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4.默认jdk版本
创建maven项目时,发现默认版本为jdk1.5,此时可以修改conf/setttings.xml 文件,下文中可以修改为你自己的版本,我用的是jdk1.8。
</profiles>
<profile>
<id>development</id>
<activation>
<jdk>1.8</jdk>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
5.maven多模块管理
节点 | 描述 |
---|---|
${project.version} | 对应当前pom的version值 |
${project.groupId} | 对应当前pom的groupId值 |
moudles | 在父模块中使用,当前pom.xml中的package为pom |
parent | 在子模块中使用 |
relativePath | 相对路径,先在本地仓库找,然后在远程仓库找 |
app-parent/pom.xml:
<modules>
中有app-service、app-web两个项目。
<dependencyManagement>
用来管理<dependency>
,子项目中未定义<version>
时,直接指向parent的版本号,如<junit>
。
app-service的version为${project.version}对应当前pom的version值,所以它的版本为0.0.1-SNAPSHOT。
app-service/pom.xml、app-web/pom.xml
junit没有写<version>
,它们继承了app-parent的junit版本。而${junit.version}又是丛<properties>
的<junit.version>
中获取的。
<moudleVersion>
下方定义了<parent>,<artifactId>引用了app-parent
。
两点需要注意:
1.父项目定义moudle,子项目定义parent时才能够实现模块管理 。两者同时出现。
2.子项目和父项目的pom.xml同级时,不需要处理。级别不一至时,需要使用relativePath定位目录。
这样做有什么好处呢?
假如你有10个项目需要清理的要求,这时你需要一个项目一个项目的清理。如果你绑定了moudle和parent后,只需清理app-parent,它关联的项目都会被清理。再假如本文中的jar版本<version>
节点,只需修改app-parent的pom.xml文件,不需要分别进入各个项目逐个修改。别的情况就不一一列举了。