当前位置: 首页 > 知识库问答 >
问题:

在父pom中定义Maven插件,但只调用子项目中的插件

段劲
2023-03-14

我有一组项目,它们都需要在构建期间运行相同系列的Maven插件执行。我想避免在每个项目中重新声明所有这些配置,所以我让它们都从一个只包含那些插件执行(8个不同的mojo)的父pom“模板”项目继承。但我希望在Maven构建期间,这些插件执行只在子项目上运行,而不在父项目上运行。

>

  • 在父POM的build/plugins元素中声明插件执行,并使用properties-maven-plugin打开父项目中其他插件的skip属性。这没有起作用,因为插件目标之一(maven-dependency-plugin:build-classpath)没有skip属性。

    在父POM的build/pluginmanagement元素中声明插件执行。不幸的是,这要求我在每个子项目的pom的build/plugins元素中重新声明八个插件中的每一个,如:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
    </plugin>
    ...
    

    这太重复了,如果我需要更改模板POM中的插件,这会有问题。

    在父pom中的配置文件中声明插件执行,该配置文件由于缺少nobuild.txt文件(父pom中确实存在该文件,所以插件不会在那里执行)而激活:

    <profiles>
        <profile>
            <activation>
                <file>
                    <missing>nobuild.txt</missing>
                </file>
            </activation>
            <build>
                ....
            </build>
        </profile>
    </profiles>
    

    除了missing元素中的文件路径似乎基于当前工作目录而不是项目basedir之外,这在大多数情况下都起作用。这破坏了我想要的一些多模块构建。编辑:为了澄清,父“模板”项目实际上本身就是多模块项目中的一个模块,例如,当我尝试在根上执行mvn install时,构建就会中断。项目结构如下所示:

    + job
    |- job-core
    |- job-template
    |- job1                   inherits from job-template
    |- job2                   inherits from job-template
    

    设置自定义生命周期和包装。这似乎允许我将插件绑定到生命周期阶段,但不指定任何配置。

    那么,有没有另一种方法来指定一组Maven插件的执行,这些插件可以跨多个项目重用(在每个项目的POM中重复最少)?

  • 共有1个答案

    柳羽
    2023-03-14

    这是第五条路。我认为它有最小的缺点:没有概要文件,没有自定义生命周期,没有子POM中的声明,没有插件的‘跳过’要求。

    从https://stackoverflow.com/A/14653088/2053580复制了它--非常感谢最终用户!

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <!-- Main declaration and configuration of the plugin -->
                    <!-- Will be inherited by children -->
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>2.9.1</version>
                    <executions>
                        <execution>
                            <!--This must be named-->
                            <id>checkstyle</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>check</goal>
                            </goals>
                        </execution>
                    </executions>
                    <!-- You may also use per-execution configuration block -->
                    <configuration...>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <!-- This declaration makes sure children get plugin in their lifecycle -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <!-- Configuration won't be propagated to children -->
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <!--This matches and thus overrides execution defined above -->
                        <id>checkstyle</id>
                        <!-- Unbind from lifecycle for this POM -->
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    
     类似资料:
    • 问题内容: 我使用的父POM定义了我不想在子POM中运行的插件。如何完全禁用子pom中的插件? 约束:我不能更改父POM本身。 问题答案: 在禁用子POM中的Findbugs时,以下对我有用: 注意:Findbugs插件的完整定义在我们的父/超级POM中,因此它将继承该版本等。 在Maven 3中,您需要使用: 用于插件。

    • Maven插件及其在父pom中定义的依赖项,我不希望我的子pom包含该插件依赖项。 例如,如果有1个父级和100个子级,99个使用该插件并希望在一个子级中排除该插件。 我们如何才能实现这一目标?

    • 我正试着做一个包含所有项目的胖uber罐子。如果我做了“MVN包”,我得到一个uber jar下的“blah”项目标签文件夹。(blah项目有主类。)uber jar包含所有项目(作为文件夹而不是jar),但当我运行它时,它似乎无法识别feature1和feature2项目。 我在上面添加了feature1和feature2的依赖项,以便它们在uber jar文件中。这错了吗?附注。blahmes

    • 我们有一个公司范围的Super Pom,用于定义我们使用的许多默认值。例如,Super Pom定义要使用的JDK版本以及其他参数。这由我们的项目继承为父pom。 我们的大多数项目都使用JDK1.7,但有一组项目仍在JDK1.6版本上。我在我的父母pom中添加了以下配置文件定义: 现在,我有一个名为的配置文件,我想在项目的pom中指定它应该默认使用这个。我该怎么做? 我尝试在项目的pom中添加: 但

    • 多项目Gradle构建中的子项目如何使用根项目的buildSrc文件夹中定义的Gradle插件? 我基本上有: 设置。格拉德尔 buildSrc/src/main/groovy/com/example/conventions/JavaConventionsPlugin。groovy buildSrc/build。格拉德尔 通用/构建。格拉德尔 我正在尝试在项目中应用插件: 但是上面说 id为“co

    • 本文向大家介绍在SpringBoot项目中利用maven的generate插件,包括了在SpringBoot项目中利用maven的generate插件的使用技巧和注意事项,需要的朋友参考一下 使用maven 插件 generate生成MyBatis相关文件 在项目中增加 maven 依赖 - mybatis-spring-boot-starter - mysql-connector-java -