Maven 插件

Maven插件URL:http://maven.apache.org/pluginsjava

Maven 的核心 仅仅定义了抽象的生命周期,具体任务由 插件完成,插件以独立的构件形式存在。apache

为了能复用代码,一个插件能完成多个任务。插件中的每一个功能就是一个插件目标。bash

Maven会区别对待依赖的远程仓库和插件的远程仓库。当依赖不存在时,回去远程查找。可是插件不在本地仓库时,不会去远程查找服务器

Maven的生命周期的阶段和插件相互绑定,以完成实际的构建任务。maven

生命周期阶段 插件目标 具体任务
clean maven-clean-plugin:clean 删除项目的输出文件
site maven-site-plugin:site 生成项目站点
site-deploy maven-site-plugin:deploy 将项目站点部署到远程服务器上
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 执行测试用例

packageui

maven-jar-plugin:jar 建立项目jar包
install maven-install-plugin:install 将项目输出构件安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构件部署到远程仓库

Maven 插件有些 内置绑定,能够直接运行,也能够根据自身须要将某个插件目标绑定到生命周期短某个阶段上。url

建立项目源码的Jar包spa

<build>
   <plugins>
      <!--插件-->
      <plugin>
         <!--插件的groupId,插件默认 groupId 为 org.apache.maven.plugins 可忽略-->
         <groupId>org.apache.maven.plugins</groupId>
         <!--插件的artifactId-->
         <artifactId>maven-sources-plugin</artifactId>
         <!--插件版本-->
         <version>2.1.1</version>
         <!--配置多个执行任务-->
         <executions>
            <!--执行任务-->
            <execution>
               <!--任务ID自定义-->
               <id>attach-sources</id>
               <!--生命周期阶段(任务执行阶段)各个插件有默认阶段-->
               <phase>package</phase>
               <!--指定要执行的多个插件目标-->
               <goals>
                  <!--插件目标-->
                  <goal>jar-no-fork</goal>
               </goals>
            </execution>
         </executions>
      </plugin>
   <plugins>
</build>

能够使用命令查看插件详情--使用的是插件 maven-help-plugin,其目标前缀 help插件

#查看插件详情.找到要查看的插件目标 其中 bound to parse 表示目标默认绑定的生命周期阶段
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin:3.6.1 -Ddtail
#显示信息的目标前缀 Goal Prefix 其做用是方便的在命令行直接运行
mvn help:describe -Dplugin=compiler
#直接获取最新版本信息
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
#仅仅描述某个插件目标的信息,能够加上 goal 参数
mvn help:describe -Dplugin=compiler -Dgoal=compile

当插件目标被绑定到不一样的生命阶段的时候,其执行顺会由生命周期阶段的前后顺序执行。

当多个插件目标绑定到同一个生命阶段的时候,这些插件的声明顺序决定了目标的执行顺序。

插件配置

1.命令行插件配置(一次性),能够在Maven命令中使用 -D参数,并伴随一个参数键=参数值的形式,来配置插件目标的参数

mvn install -Dmaven.test.skip=true #跳过测试 maven.test.skip 是由该插件的参数的表达式 Expression 决定的

2.POM中插件的全局配置

<project>
   ...
   <build>
      <plugins>
         <plugin>
            <groupId>插件groupId</groupId>
            <artifactId>插件Id</artifactId>
            <!--插件全局配置-->
            <configuration>
               <source>编译java版本</source>
               <target>生成字节码的java版本</target>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

插件任务配置

<build>
   <plugins>
      <!--插件-->
      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-antrun-plugin</artifactId>
         <version>1.3</version>
         <executions>
            <execution>
               <id>ant-validate</id>
               <phase>validate</phase>
               <goals>
                  <!--插件目标-->
                  <goal>run</goal>
               </goals>
               <configuration>
                  <tasks>
                     <echo>I`m bound to Validate phase</echo>
                  </tasks>
               </configuration>
            </execution>
            <execution>
               <id>ant-verify</id>
               <phase>verify</phase>
               <goals>
                  <!--插件目标-->
                  <goal>run</goal>
               </goals>
               <!--配置一个echo ant 任务,向命令行输出一段文字-->
               <configuration>
                  <tasks>
                     <echo>I`m bound to Verify phase</echo>
                  </tasks>
               </configuration>
            </execution>
         </executions>
      </plugin>
   <plugins>
</build>

从命令行调用插件

mvn -h #显示 mvn 的命令帮助

插件仓库,

内置的插件远程仓库默认配置。

<project>
   .....
   <!--声明远程仓库-->
   <pluginRepositories>
      <!--声明一个或者多个repository元素(远程仓库)-->
      <pluginRepository>
         <!--Maven 默认插件远程仓库 id 为central,一样的仓库ID会覆盖-->
         <id>central</id>
         <name>Maven Plugin Repository</name>
         <url>http://repo1.maven.org/maven2</url>
         <!--控制快照版构件-->
         <snapshosts>
           <enabled>false</enabled>
         </snapshosts>
         <!--控制发布版构件-->
         <releases>
           <!--控制更新频率,默认 daily(天天更新),never(从不),always(每次),interval:X(每隔X分钟更新)-->
           <updatePolicy>nerver</updatePolicy>
         </releases>
      </repository>
   <repositories>
   .....
</project>

其余groupId 上的插件元数据获取插件

<settings>
   ...
   <pulginGroups>
      <pluginGroup>com.your.plugins</pluginGroup>
   </pluginGroups>
   ...
<settings>
相关文章
相关标签/搜索