在maven中创建独占配置文件

时间:2012-10-04 06:47:58

标签: maven maven-profiles

我目前有一个具有平台特定配置文件的pom(例如linux 32bit,windows 64 bit等...)。此外,我已将其设置为自动选择调用者平台作为默认设置。

现在,假设我在linux 32机器上:我也想通过调用mvn -Pwin64 pakage为win64构建,但这样做,linux32和win64配置文件都被激活了。我尝试使用activeProfiles并使用ativation标记激活本地平台配置文件。麻烦的是-P不会禁用所有其他配置文件,如documentation

中所述
  

此选项采用逗号分隔的参数列表   profile-id使用。如果指定此选项,则不会显示其他配置文件   将激活比选项参数中指定的那些。

我理解这是错的吗?你会怎么处理这个?

注意:我知道我可以运行mvn -P-linux32,win64 仅在linux32平台上有效,并且任何错误都可能导致带有重复类的膨胀构建。

谢谢!

2 个答案:

答案 0 :(得分:4)

来自profile docs的声明:

  

从Maven 3.0开始,POM中的配置文件也可以根据settings.xml中活动配置文件的属性激活。

会引导我尝试下面的解决方案。每个开发人员将其默认平台定义为其settings.xml文件中的属性,并在需要时将其覆盖在cmdline上。

开发人员的settings.xml

<profile>
    <id>platform-config</id>
    <property>
        <name>build.platform</name>
        <value>win32</value>
    </property>
</profile>
....
<activeProfiles>
    <activeProfile>platform-config</activeProfile>
</activeProfiles>

项目的pom.xml

<project>
...
<profiles>
    <profile>
        <id>win32</id>
        <activation>
            <property>
                <name>build.platform</name>
                <value>win32</value>
            </property>
        </activation>
        ...
    </profile>
    <profile>
        <id>linux32</id>
        <activation>
            <property>
                <name>build.platform</name>
                <value>linux32</value>
            </property>
        </activation>
        ...
    </profile>
</profiles>

然后,mvn install应该激活win32配置文件,因为build.platform属性的默认值是win32,而mvn install -Dbuild.platform=linux32将覆盖默认属性设置并改为使用Linux配置文件。 / p>

答案 1 :(得分:0)

为什么不使用平台激活配置文件,如下所示:

<project>
    ...
    <profiles>
        <profile>
            <id>win32</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <os>
                   <name>Windows XP</name>
                                <family>Windows</family>
                                <arch>x86</arch>
                                <version>5.1.2600</version>
                        </os>
            </activation>
            ...
        </profile>
    </profiles>
</project>