美文网首页
5- Maven插件

5- Maven插件

作者: 熙熙爸爸 | 来源:发表于2017-08-24 09:34 被阅读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已经默认绑定的目标。
  • 在默认情况下,并不是所有的phase都绑定了goal,比如clean这个lifecycle是有三个phase的,但是只有其中的一个名为clean的phase默认绑定了一个clean:clean goal,其它两个phase默认没有绑定任何goal。

其他默认的插件目标绑定请参考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

相关文章

网友评论

      本文标题:5- Maven插件

      本文链接:https://www.haomeiwen.com/subject/lozrdxtx.html