[英]Weird behavior with Maven plugin management with maven-surefire-plugin
我有一個父母pom定義
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<parallel>classesAndMethods</parallel>
<threadCount>4</threadCount>
</configuration>
</plugin>
</plugins>
</pluginManagement>
我有一個子項目,該子項目從pom繼承,但未在其插件部分中聲明該插件。 我仍然可以在執行Maven測試目標時看到該插件生效。
這是正常現象,因為默認情況下, maven-surefire-plugin
作為內置生命周期綁定的一部分綁定到test
階段。 無需在子項目中聲明它。
換句話說,該插件對於子項目是隱式可用的,因為它將自身綁定到test
階段。 默認情況下, maven-scm-plugin
(在另一個問題中鏈接)沒有綁定到任何階段,因此您必須在子級中聲明它才能從父級繼承配置。 但是由於maven-surefire-plugin
默認綁定到測試階段,因此您不需要在子級中聲明它。 嘗試在子模塊中運行mvn help:effective-pom
,以查看有效的POM ,其中顯示了Maven實際使用的最終POM。 檢查http://maven.apache.org/ref/3.3.9/maven-core/default-bindings.html以查看默認插件綁定。
如果要跳過該插件,只需執行mvn install
或傳遞-DskipTests=true
。 如果仍然需要運行mvn test
來在其他項目中運行測試,則可以跳過子模塊的POM中的測試(盡管完全不建議這樣做):
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
在父項目中定義maven-surefire插件時,請參閱: http : //maven.apache.org/surefire/maven-surefire-plugin/usage.html
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</pluginManagement>
添加配置節將使其隱式在每個子項目中執行。
在子項目中,配置看起來像
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<parallel>classesAndMethods</parallel>
<threadCount>4</threadCount>
</configuration>
</plugin>
即使子項目中的配置非常冗長,也可以確保在所有子模塊中顯式添加依賴項和相同版本的插件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.