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>