我有一个maven pom.xml文件,它有多个配置文件:
{{1}}
我通过配置文件-Dp1,p5或类似物激活p1,p2,p5中的一个或多个。但我希望p3和p4中的任何一个始终处于活动状态。默认情况下,它应始终为p3。如果我指定-Dp4,那么p3应该变为非活动状态。
理想情况下,如果我指定-Dp3,p4,maven应该抛出错误但是没有必要。
知道如何做到这一点?
答案 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将通过插件而不是开箱即用的功能抛出错误。)