Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
Maven本质上是一个插件框架,他定义好了POM后,由插件来完成构建功能。今天主要介绍一些常用的Maven框架。
一.清理插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
</plugin>
该插件用来删除在构建期间生成的文件或文件夹。扫描并删除以下文件夹:project.build.directory,project.build.outputDirectory,project.build.testOutputDirectory, and project.reporting.outputDirectory。
使用方式: mvn clean
二.编译插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
source: 源代码编译JDK版本
target:目标平台编译版本
encoding:字符集编码
该插件包含两个goals:
-
compiler:compile
编译mainSource,在适宜的阶段自动执行。 -
compiler:testCompile
编译testSource,在适宜的阶段自动执行。
使用方式: mvn compiler
三.资源插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- 绑定到package阶段,自动执行 -->
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<outputDirectory>outputdir</outputDirectory>
<resources>
<resource>
<includes>
<!-- 资源中包含的文件匹配符 -->
<include>*.txt</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</execution>
</executions>
</plugin>
该插件用于复制指定的资源文件到output directory. 有三个goals:
-
resources:resources
复制主代码的资源文件到指定的输出目录中,一般是开发包下的资源文件(project.build.resources),也就是src/main/resources下的。一般用于资源文件的打包 -
resources:testResources
复制测试代码的资源文件到指定的输出目录中,一般是测试包下的资源文件(project.build.testResources)。 -
resources:copy-resources
复制指定的资源文件到指定的目录中。专用来在多模块中复制资源使用。
四.依赖插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-dependencies</id>
<!-- 绑定到compile期间 -->
<phase>compile</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- 表示是否不包含间接依赖的包 -->
<excludeTransitive>false</excludeTransitive>
<!-- 表示复制的jar文件去掉版本信息 -->
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
该插件用于从本地或者远程的repository中复制(或/和)解压依赖的jar到指定的位置。当前插件的goals较多,在此就不一一列举了。列举常用的如下:
- dependency:copy
将插件配置部分中定义的工件列表(<artifactItems>
),并将其复制到指定的位置。
- dependency:copy-dependencies
需要项目直接依赖项和可选传递依赖项的列表,并将它们复制到指定的位置。
五.打包插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 可以有多个descriptorRefs -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- 可以指定一个特殊的descriptor -->
<!--
<descriptors>
<descriptor>src/assembly/src.xml</descriptor>
</descriptors>
-->
<!-- 绑定执行期间-->
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executoins>
<!-- 创建一个可执行的jar -->
<archive>
<manifest>
<mainClass>org.sample.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
该插件主要用于将依赖的jar,模块,site文档,其他的文件等聚合到一个单独的archive中。archive支持如下格式:
- zip
- tar
- tar.gz (or tgz)
- tar.bz2 (or tbz2)
- jar
- dir
- war
- and any other format that the ArchiveManager has been configured for
想要使用Assembly插件,你需要:
- 选择或者写好一个descriptor去使用
- 在你的项目中配置好Assembly插件
- 在你的项目中执行 mvn assembly:single
or mvn package