5- Maven插件

2017-08-24  本文已影响0人  熙熙爸爸

Maven生命周期和插件的关系

前面说了,Maven定义了3套相互独立的生命周期。每套生命周期中都包含着一系列的阶段(phase)。这些phase就相当于Maven提供的统一的接口,然后这些phase的实现由Maven的插件来完成。

我们在输入mvn命令的时候 比如 mvn clean,clean对应的就是Clean生命周期中的clean阶段。但是clean的具体操作是由maven-clean-plugin来实现的。

所以说Maven生命周期的每一个阶段的具体实现都是由Maven插件实现的。

插件目标(Plugin Goal)

插件能够为Maven提供不同的功能,而一个插件可能包含多个插件目标(goals),目标可以说是Maven中的最小工作单元。
比如compile:compile 表示执行compile插件的 compile目标。


一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:


每个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins

插件的运行

1. 直接调用插件的目标 mvn plugin:goals

例如

mvn compile:compile
mvn clean:clean
2. 绑定到生命周期的phase中
  1. 首先Maven默认绑定了一些插件到phase中比如
phase goals
clean clean:clean
phase goals
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb或ejb3:ejb3或jar:jar或par:par或rar:rar或war:war
install install:install
deploy deploy:deploy

在当packaging设置为ejb/ejb3/jar/par/rar/war 其中之一的时候,default lifecycle只有下面phase绑定了goal。

phase goals
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package ejb:ejb或ejb3:ejb3或jar:jar或par:par或rar:rar或war:war
install install:install
deploy deploy:deploy
phase goals
site site:site
site-deploy site:deploy

其他默认的插件目标绑定请参考Maven官方文档

  1. 自定义绑定插件
    可以在pom.xml中进行绑定配置
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <!-- groupId artifactId version 是maven的坐标 -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>

以上示例中,声明了maven-source-plugin(使用groupId、artifactId、version指定)。然后在<executions>元素下指定多个任务<execution>,通过指定多个<execution>,就可以把相同插件的目标绑定到不同的生命周期阶段。
<id>指定任务名称(在一个插件中必须唯一),
<phase>指定到的生命周期阶段,
<goal>指定插件目标。

如果没有指定<phase>,那么就会绑定到插件默认的生命周期阶段上。如果插件没有默认生命周期阶段,那么插件目标将不会被执行。

通过以上的配置,现在执行mvn verify将看到maven-source-plugin的jar-no-fork目标被执行。
以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包。

3. 配置插件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

maven compile插件默认使用的编译版本是1.5,可以通过配置修改编译版本。

也可以对插件的各个目标进行更具体的配置。Configuring Plug-ins

上一篇 下一篇

猜你喜欢

热点阅读