如何在maven配置文件的子集中共享插件配置

时间:2015-10-22 22:51:34

标签: maven maven-3 maven-plugin

我们说我有三个maven个人资料。

  • local-dev
  • ci
  • prod

现在我使用相同的插件配置ciprod。我根本不想local-dev使用它。所以它看起来像这样。

<profile>
    <id>local-dev</id>
</profile>
<profile>
    <id>ci</id>
    <build>
        <plugins>
            <plugin>
                <artifactId>A-PLUGIN</artifactId>
            </plugin>
        </plugins>
    </build>
</profile>
<profile>
    <id>prod</id>
    <build>
        <plugins>
            <plugin>
                <artifactId>A-PLUGIN</artifactId>
            </plugin>
        </plugins>
    </build>
</profile>

事实证明A-PLUGIN有很多配置,因为它在多个配置文件中完全相同,所以我喜欢将它定义在一个地方,只需从其所需的配置文件中引用它。

1 个答案:

答案 0 :(得分:2)

让我引用the Maven forum

  

我的想法是,如果一个人只是跳过配置文件作为解决每个条件情况的解决方案,那么构建将会像恐怖电影中的水弹一样成长为第二个头,你真的后悔了。

     

关键是配置文件通常是正确使用Maven的权宜之计。应该始终考虑它们&#34;最后的手段&#34;除非你知道自己在做什么。

     

在我的情况下,[...]配置文件非常适用于此,但我现在可以确切地看到九头蛇现在适合野兽的地方,除非绝对必要,否则不打算再用它们做任何事情。

我已经使用了个人资料。我是第二个观点。

从概念的角度来看,你有三个项目有很多甚至大部分的共同点。这就是Maven的POM层次结构及其继承发挥作用的地方:

main-parent
  +- pom.xml ... containing declarations common to dev, ci & prod
  +- dev
  |    +- pom.xml ... almost empty since everything's inherited from parent
  |    +- ... sources, resources, etc. ... 
  +- ci-prod-parent
       +- pom.xml ... containing A-PLUGIN and other declarations specific to ci & prod 
       +- ci
       |    +- pom.xml ... almost empty since everything's inherited from parent(s)
       |                   redirecting <build>/<[[test]source|resource>/]|
       |                       [[test]output|testresource>/]directory> to ../../dev/...
       +- prod
            +- pom.xml ... almost empty since everything's inherited from parent(s)
                           redirecting <build>/<[[test]source|resource>/]|
                               [[test]output|testresource>/]directory> to ../../dev/...

有关要重定向的所有构建目录,请参阅 POM参考中的The BaseBuild Element SetResourcesThe Build Element Set

请参阅Maven include another pom for plugin configuration

  

唯一正确的答案是使用继承。

我也是第二个。