Maven Plugin使用记录

Maven插件机制

Maven的核心仅仅定义了抽象的生命周期,具体的任务是交由插件完成的,插件以独立的构件形式存在,Maven会在需要的时候下载并使用插件。

插件机制的目的

插件本身,为了能够复用代码,它往往能够完成多个任务,为每个这样的功能编写一个独立的插件显然是不可取的,因为这些任务背后都有很多可以复用的代码,这些功能都聚集在一个插件里,每个功能就是一个插件目标。

通用写法 compiler:compile(插件前缀:插件目标)

插件的绑定

Maven生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

  • clean生命周期阶段插件绑定关系
生命周期阶段 插件目标 执行任务
pre-clean
clean maven-clean-plugin:clean 删除项目的输出目录
post-clean
  • site生命周期阶段与插件绑定关系
生命周期阶段 插件目标 执行任务
pre-site
site maven-site-plugin:site target/site生成站点
post-site
site-deploy maven-site-plugin:deploy 部署到web服务器
  • default生命周期阶段与插件绑定关系(jar)
生命周期阶段 插件目标 执行任务
process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录
compile maven-compiler-plugin:compile 编译主代码至主输出目录
process-test-resources maven-resources-plugin:testResources 复制测试资源文件至测试输出目录
test-compile maven-compiler-plugin:testCompile 编译测试代码至测试输出目录
test maven-surefire-plugin:test 执行测试用例
package maven-jar-plugin:jar 创建项目jar包
install maven-install-plugin:install 将项目输出构件安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构件部署到远程仓库

插件配置

  • 命令行配置
# –D 参数
是Java自带,功能是通过命令行设置一个Java系统属性,Maven简单地重用了该参数。

# maven-surefire-plugin
maven-surefire-plugin 提供一个 maven.test.skip 参数,当其值为 true的时候,就会跳过执行测试。
  • pom 中插件全局配置

如指定jdk编译版本

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.1</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

其他插件

Maven-release-plugin

# 版本管理
# 功能:

SNAPSHOT快照版本,RELEASE正式版本

正式发布流程:

1. 在trunk中,更新pom版本从1.0-SNAPSHOT到1.0
2. 对1.0打一个git tag
3. 针对tag进行mvn deploy,发布正式版本
4. 更新trunk从1.0到1.1-SNAPSHOT


<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-release-plugin</artifactId>
      <version>2.5.3</version>
      <configuration>
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <generateReleasePoms>false</generateReleasePoms>
        <arguments>-DskipTests</arguments>
        ...
      </configuration>
</plugin>

<scm>
  <developerConnection>scm:git:xxx</developerConnection>
</scm>

命令:
mvn release:prepare release版本打tag,snapshot版本自动迭代 
mvn release:perform release版本打包,分发到远程Maven仓库中

maven版本规则
<主版本>.<次版本>.<增量版本>

Maven-checkstyle-plugin

# 代码风格检查

添加checkstyle配置文件
<checkstyle.config.location>checkstyle.xml</checkstyle.config.location>


       <plugin>  
          <groupId>org.apache.maven.plugins</groupId>  
          <artifactId>maven-checkstyle-plugin</artifactId>  
          <version>2.9.1</version>  
       </plugin>  
  
       <plugin>  
          <groupId>org.apache.maven.plugins</groupId>  
          <artifactId>maven-jxr-plugin</artifactId>  
          <version>2.3</version>  
       </plugin> 
       
mvn命令检测代码
mvn checkstyle:checkstyle 检查工程是否满足checkstyle
mvn jxr:jxr 命令可以查看有错的对应代码

Maven-shade-plugin

# 绑定package生命周期目标,用户项目打可执行包,包含依赖,以及对依赖进行取舍过滤

Maven-resources-plugin

# Maven中的资源文件默认存在于src/main/resources,resources用于提供自定义资源打包功能

 <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-resources-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                //自定义输出目录,将resource/conf下的配置打包到输出目录/conf
                                <outputDirectory>${build.path}/conf</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>../conf/</directory>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

Maven-source-plugin

# 自动将源码打包并发布的功能,
mvn install:将source install到repository
mvn deploy:将source deploy到remote-repository
mvn source:jar:单独打包源码

参考

http://maven.apache.org/plugins/index.html