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>
相關文章
相關標籤/搜索