Maven每次都激活两个配置文件中的一个

时间:2015-12-03 04:25:04

标签: maven maven-3

我有一个maven pom.xml文件,它有多个配置文件:

{{1}}

我通过配置文件-Dp1,p5或类似物激活p1,p2,p5中的一个或多个。但我希望p3和p4中的任何一个始终处于活动状态。默认情况下,它应始终为p3。如果我指定-Dp4,那么p3应该变为非活动状态。

理想情况下,如果我指定-Dp3,p4,maven应该抛出错误但是没有必要。

知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

首先,您不能通过-D选项激活配置文件,而是通过命令行通过-P选项激活配置文件。或者,您可以通过配置文件部分的activation元素激活配置文件,默认情况下将其设置为活动状态,或者如果通过settings.xml部分在activeProfiles中定义配置文件,则可以激活配置文件。

如果指定不必要的配置文件,Maven不会抛出错误。

因此,如果您想默认激活配置文件3,可以在profile部分中将其设置为以下内容:

        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>

如果那时你要打开一个配置文件而另一个关闭,请在命令行的配置文件名称之前使用!-表示法,例如:

mvn clean install -Pp3!p4

它将激活p3配置文件并停用p4配置文件。

请注意,!字符在bash中是一个特殊字符,因此您应该将其包装在单引号中。

但是,请注意,从命令行激活配置文件将在POM中停用默认活动的配置文件,但默认情况下不会激活作为settings.xml的一部分活动的配置文件(但是它将由所有Maven构建共享)在那台机器上。)

来自Maven关于profiles

的官方文档
  

除非使用上述方法之一激活同一POM中的其他配置文件,否则此配置文件将自动为所有版本激活。默认情况下处于活动状态的所有配置文件在命令行上激活POM中的配置文件或通过其激活配置时自动停用。

您可以使用以下有关配置文件激活的POM示例:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample</groupId>
    <artifactId>profiles-sample</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <profiles>
        <profile>
            <id>p1</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.5</version>
                        <executions>
                            <execution>
                                <id>p1</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <echo message="hello from p1" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>p2</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.5</version>
                        <executions>
                            <execution>
                                <id>p2</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <echo message="hello from p2" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>p3</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.5</version>
                        <executions>
                            <execution>
                                <id>p3</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <echo message="hello from p3" />
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

最后,如果您不想在默认情况下设置配置文件,但是您希望在运行时强制使用它,则可以查看Maven Enforcer Plugin及其Require Active Profile rule。在配置时,如果未指定所需的配置文件,则可以使构建失败(因此,是的,在这种情况下,Maven将通过插件而不是开箱即用的功能抛出错误。)