【发布时间】:2011-06-17 21:31:11
【问题描述】:
我有一个带有一些插件的父 pom。在我的孩子 pom 中,我想排除一个插件。
我该怎么做?
【问题讨论】:
标签: maven
我有一个带有一些插件的父 pom。在我的孩子 pom 中,我想排除一个插件。
我该怎么做?
【问题讨论】:
标签: maven
您可以在 <pluginManagement> 中声明父 pom 中的所有插件。在每个孩子中,您可以声明该孩子使用的插件。这样,您可以根据需要包含或排除插件。
你也可以看看这个相关的SO discussion。
【讨论】:
我有类似的要求,即在子级而不是父级 POM 中运行一些插件。我通过在父 POM 中声明 <skip>true</skip> 来实现这一点。
父pom条目在下面
<plugin>
<groupId>eviware</groupId>
<artifactId>maven-soapui-plugin</artifactId>
<version>4.0.0</version>
<inherited>false</inherited>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
</dependency>
</dependencies>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
子项目pom入口在下面
<plugins>
<plugin>
<groupId>eviware</groupId>
<artifactId>maven-soapui-plugin</artifactId>
<version>4.0.0</version>
<configuration>
<settingsFile>site-service-web/src/test/soapui/soapui-settings.xml</settingsFile>
<projectFile>site-service-web/src/test/soapui/PodifiSite-soapui-project.xml</projectFile>
<outputFolder>site-service-web/target/surefire-reports</outputFolder>
<junitReport>true</junitReport>
<exportwAll>true</exportwAll>
<printReport>true</printReport>
</configuration>
</plugin>
</plugins>
【讨论】:
<configuration><skip>true</skip></configuration> 放在子 pom 中也可以使用
您可以使用由属性激活的profile 来确定是否使用插件。默认情况下,可以激活该属性,并且您不想在其中使用它的一个项目可以包含该属性值以排除该插件。
【讨论】:
您可以在 pluginManagement 部分的父 pom 中定义所有插件
<pluginManagement>
<plugins>
...
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeTypes>tar.bz2</includeTypes>
<outputDirectory>${project.basedir}/target/dependencies</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</pluginManagement>
在父子pom之后你可以控制这个插件的执行阶段
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<inherited>false</inherited>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
如果你将它粘贴到父 pom 中,不要忘记选项 <inherited>false</inherited>,它会禁用子 pom 中的执行继承。
【讨论】:
ignore 实际上仍然会调用插件,但让插件决定。使用 phase=none 可以防止 Maven 甚至查找插件的类路径,这在某些情况下可能会有所帮助。