从父POM中排除插件的Maven设置

31
我有一个包含几个插件的父POM文件。在我的子POM文件中,我想排除其中一个插件。
如何操作呢?
5个回答

14

我有一个类似的需求,即在子POM中运行一些插件但不在父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>

3
<configuration><skip>true</skip></configuration> 当你将其放在子POM中时也可以起作用。 - Jeremy Moritz

7

您可以在父POM中的pluginManagement部分定义所有插件

    <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和子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 查找插件的类路径,这在某些情况下非常有帮助。 - ctron
实际上并不需要在父级中将插件更改为插件管理部分:您只需将阶段设置为子模块中不存在的内容,以便在其中排除您想要排除的插件。 - undefined

3
你可以在父POM中的<pluginManagement>中声明所有插件。然后在每个子模块中,你可以声明该子模块所使用的插件。这样,你可以根据需要包含或排除插件。
你也可以参考相关的SO讨论

3
在我的情况下,我有一个插件被10个子模块中的9个使用。我认为把插件放在父模块中,让这9个子模块继承,并告诉第10个模块排除它,会更容易些。我知道你所说的方法,只是想知道是否可能仅从子项目中排除插件...如果Maven没有这个功能也没关系。我对Maven并不是很了解,所以在这里发帖想了解一下Maven是否有这样的功能。 - user373201
16
这个回答并没有真正回答如何排除某些特定的继承插件的问题。 - Pablo Lalloni

1
您可以使用由属性激活的profile来确定是否使用插件。默认情况下,该属性可以被激活,而在不想使用它的项目中,可以包含属性值来排除该插件。

0
一些Maven插件在配置中接受skip标志。
示例
          <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.7.2</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>

检查您的插件文档是否被接受。 否则,请查看其他答案以处理配置文件或插件管理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接