Inheritance 如何获取子模块';s poms是否不继承父级中的插件?

Inheritance 如何获取子模块';s poms是否不继承父级中的插件?,inheritance,maven-plugin,non-recursive,Inheritance,Maven Plugin,Non Recursive,我的项目有一个父pom和几个子模块pom。我在父级中添加了一个插件,负责构建安装程序可分发文件(使用install4j)。让这个插件在子模块上运行是没有意义的,所以我在插件的配置中设置了false,如下所示。问题是,当我运行mvn clean install install4j:compile时,它会在父模块上清理、编译并运行install4j插件,但随后它会尝试在子模块上运行它并崩溃 这是插件配置 com.google.code.maven-install4j maven-install4j

我的项目有一个父pom和几个子模块pom。我在父级中添加了一个插件,负责构建安装程序可分发文件(使用install4j)。让这个插件在子模块上运行是没有意义的,所以我在插件的配置中设置了false,如下所示。问题是,当我运行
mvn clean install install4j:compile
时,它会在父模块上清理、编译并运行
install4j
插件,但随后它会尝试在子模块上运行它并崩溃

这是插件配置


com.google.code.maven-install4j
maven-install4j-plugin
0.1.1
假的
${devenv.install4jc}
${basedir}/newinstaller/ehd-demo.install4j
${project.version}
假的
真的
我是否误解了继承=false的目的?正确的方法是什么


我正在使用Maven 2.2.0。

我发现这可以通过几种方式工作。我现在做这件事的方式

  • 取出
    false
  • 首次运行mvn清洁安装
  • 然后运行
    mvn install4j:compile-N
    (对于非递归)

  • 该插件还可以使用聚合器注释来实现相同的效果。

    您可以在激活条件下在配置文件中运行该插件,尽管有点难看:-(

    
    只有根
    this-file-exist-only-in-parent-project.xml
    
    插件中的继承标记仅用于防止将此标记用作父级的pom使用该插件。您真正的问题(据我所知也是我的问题)是您的pom也是一个聚合器(带有子模块)并且您希望避免在子模块上运行该模块。对于特定的install4j插件,使用-N可以做到这一点,但在正常情况下,如果您只想为所有插件运行mvn包,则无法解决此问题(因为不会递归调用插件)。所以,我想说,这并不能解决一般问题,但我没有更好的主意……还有,亲爱的StackOverflow。我真的很喜欢这样一个功能,在没有其他人知道如何解决问题的情况下,我可以对自己两年前的问题的答案投反对票。在更新的@Mojo注释中,您可以通过添加属性来触发这种行为ute to the annotation of aggregator=true。对于每个多模块项目只执行一次的插件,将它们作为聚合器是一个很好的方法。谢谢,-N是唯一对我有效的解决方案,也尝试了false和其他东西,但都没有成功
        <profile>
            <id>only-in-root</id>
            <activation>
                <file>
                    <exists>this-file-exist-only-in-parent-project.xml</exists>
                </file>
            </activation>