Maven:在处理多个配置文件时使用通用/共享插件

时间:2010-02-22 15:03:00

标签: maven-2

我有一个使用多个配置文件的项目。每个配置文件都使用以下插件:

  • 行家编译-插件
  • 行家资源-插件
  • 行家-antrun-插件
  • 行家-万无一失-插件
  • 行家-战争插件

然而,以粗体标记的那个是唯一的插件,其中配置文件之间存在差异(将使用antrun插件复制不同的配置文件)。所有配置文件的其他4个插件配置完全相同。

现在的问题是:是否有一些方法可以只包含一次这些常见插件,但默认情况下仍会将它们用于所有配置文件?

类似的东西:

<shared><plugin1><plugin2>...</shared>
<profile><plugin3></profile>
<profile><plugin3></profile>
...

感谢,
斯泰恩

2 个答案:

答案 0 :(得分:13)

如果所有个人资料都使用了插件,只需在<build>部分中定义:

<project>
...
    <build>
        <plugins>
             Your shared plugins go here...
        </plugins>

    <profiles>
        Definition of profiles...
    </profiles>
</project>

这样,您只需在profiles块中定义antrun插件。

答案 1 :(得分:6)

只需在build部分中添加常见插件:

<build>
    <plugins>
        <plugin>
            <groupId>...</groupId>
            <artifactId>plugin1</artifactId>
        </plugin>
        ...
    </plugins>
</build>

然后在个人资料中添加特定插件:

<profiles>
    <profile>
        <id>...</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>...</groupId>
                    <artifactId>plugin3</artifactId>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

您还可以通过以下方式在不同的配置文件中以不同的方式配置相同的插件:

<profiles>
    <profile>
        <id>profile1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>...</groupId>
                    <artifactId>plugin1</artifactId>
                    <configuration>
                        <setting>value1</setting>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>profile2</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>...</groupId>
                    <artifactId>plugin1</artifactId>
                    <configuration>
                        <setting>value2</setting>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>