Maven本质上是一个执行插件的框架。插件共分两类:build插件和reporting插件。
- build插件,会在build阶段被执行,应该配置在POM的<build/>元素中。
- reporting插件,生成站点的时候会执行,应该配置在POM的<reporting/>元素中。因为reporting插件的结果是生成的站点的一部分,所以这种插件应该是国际化和本地化的。此处更多详见 http://maven.apache.org/plugins/localization.html。
但所有的插件至少都需要指明:groupId、artifactId、version。
通用配置
Maven插件都是通过指定一个<configuration>元素来配置的。而该元素中的子元素,都是Mojo中的property。
详见 http://maven.apache.org/guides/mini/guide-configuring-plugins.html 。
配置build插件
下面仅仅是在<build>元素中配置build插件。
使用<executions>标签
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<此处未完待续>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Maven项目支持的插件
org/apache/maven/plugins中有最新的插件列表。
核心插件
clean 负责build之后的清理工作
compiler 编译Java源码
deploy 将构建好的artifact部署到远程仓库
failsafe 在隔离的类加载器中运行JUnit集成测试
install 将构建好的artifact部署到本地仓库
resources 将资源复制到输出文件夹,以包含进JAR中。
site 为当前项目生成一个站点
surefire 在一个隔离的类加载器中运行JUnit单元测试
verifier 对集成测试有用 -- 校验特定环境的存在性
负责打包的类型/工具
ear 为当前项目生成一个EAR
jar 从当前项目构建一个JAR
rar 从当前项目构建一个RAR
war 从当前项目构建一个WAR
shade 从当前项目构建一个Uber_JAR,包含依赖。(也叫fat jar或super jar)
source 从当前项目构建一个源码JAR
Maven大陆之外的插件:codehaus.org, code.google.com, misc
misc,其他的缩写。主要是指由各个项目提供的Maven插件,这里仅列出两个:
下面用一些例子来说明使用的方法
一、WAR插件,有4种方式来使用它:
- 将项目package成war类型
- 调用 war:war goal
- 调用 war:exploded goal
- 调用 war:inplace goal
注意:当使用 war: goals时,它会假定compile阶段已经完成。
<project> ... <build> <!-- 在parent POM中定义版本 --> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> </plugin> ... </plugins> </pluginManagement> <!-- 在POM 或 parent POM中使用插件 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> </plugin> ... </plugins> </build> ... </project>
<project> ... <groupId>com.example.projects</groupId> <artifactId>documentedproject</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>Documented Project</name> <url>http://example.com</url> ... </project>
- 调用 mvn package 或者 mvn compile war:war,会在 target/ 下面生产相应版本的war文件(文件名是:artifactId-version.war)。
- 调用 mvn compile war:exploded 则会在 target/ 下面生成非打包的war文件夹。该文件夹的名字是finalName,而finalName通常是artifactId-version形式。当然,可以通过制定 webappDirectory参数来覆盖默认。
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <webappDirectory>/sample/servlet/container/deploy/directory </webappDirectory> </configuration> </plugin> </plugins> </build> ... </project>
- 调用 mvn compile war:inplace,则会在 src/main/webapp/ 下面创建未打包的war文件夹。
小结:4种调用方式,但实际效果是3种,区别在于最终创建的是文件还是文件夹、在什么地方创建(target/, src/main/webapp/)。
官方文档链接:
http://maven.apache.org/plugins/index.html