Maven的生命周期与Maven插件是项目绑定的,生命周期可以理解为项目构建步骤的集合,它定义了各个构建环节的执行顺序,有了这个顺序,Maven 就可以自动化的执行构建命令。Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。有三套相互独立的生命周期,各个构建环节执行顺序不能打乱,必须按照既定的正确顺序来执行。
- Clean Lifecycle:在进行真正的构建之前进行一些清理工作
- Default Lifecycle:构建的核心部分,编译、测试、打包、安装、部署等等。
- Site Lifecycle:生成项目报告,站点,发布站点。
这三个都是相互独立的。你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然,也可以直接运行 mvn claen install site 运行所有这三套生命周期。Maven默认地将一些默认插件的目标与Maven的生命周期维系在了一起,比如default的compile这个阶段就是和maven-compiler-plugin这个插件的compile目标维系着不可分割的关系。
为了不让用户不用任何配置就能进行一般程度的项目构建,Maven默认给自己生命周期的核心阶段绑定了自己的插件。clean如下:
site如下:
最麻烦的就是最核心的default:
通过 Maven 的生命周期我们可以了解到,不同的生命周期绑定不同的插件;同时我们知道,下载下来的maven核心的东西不过3-4M,它主要就是通过插件来完成这些工作的,一旦碰到没有的插件,它会跑到相应的地方下载,然后来完成整个过程。那么在我们的项目中如何使用插件呢?
打开http://maven.apache.org/plugins/index.html网址,我们可以看到apache下面的很多插件,apache下面的插件是比较正规的,它里面的信息非常详细。下面我们来看看里面有个source的插件的用法。
Source插件是对源代码进行打包的一个插件,默认情况下,它会将生成的源代码放在工程目录的target下面。
Source插件具有五个目标:
source:aggregateaggregrates sources for all modules in an aggregator project. source:jaris used to bundle the main sources of the project into a jar archive. source:test-jaron the other hand, is used to bundle the test sources of the project into a jar archive. source:jar-no-forkis similar to jar but does not fork the build lifecycle. source:test-jar-no-forkis similar to test-jar but does not fork the build lifecycle.
在我们的工程pom.xml中,在后面引入下面这段配置:
<build> <plugins><plugin>
<groupId>
org.apache.maven.plugins
</groupId><artifactId>
maven-source-plugin
</artifactId>
<version>2.1.2</version>
</plugin></plugins> </build>
上面这段配置就是对源码进行打包的插件,我们运行source:jar-no-fork,那么在项目的目录底下的target会生成一个类似于user-core-0.0.1-SNAPSHOT-sources.jar这样的文件,即项目的源文件。那么如何将这个插件与特定的生命周期绑定呢?我们来看下面这段配置:
<build> <plugins> <plugin><groupId>org.apache.maven.plugins
</groupId><artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions> <execution>
<phase>package</phase><goals> <goal>jar-no-fork</goal></goals> </execution> </executions></plugin> </plugins>
</build>
通过这段配置,大家可以用mvn package将项目打包的同时会将源代码进行打包。图示说明:
Apache Maven里面还有很多有用的插件,大家可以自己去试一下,里面说明很详细,大家只要按着官方文档进行配置,一般情况下是没问题的