我有一个maven pom.xml文件,它有多个配置文件:
<profiles>
<profile>
<id>p1</id>
</profile>
<profile><id>p2</id></profile>
<profile><id>p3</id></profile>
<profile><id>p4</id></profile>
<profile><id>p5</id></profile>
</profiles>
我通过配置文件-Dp1、p5或类似的方式激活p1、p2、p5中的一个或多个。但我希望p3和p4中的任何一个始终处于活动状态。默认情况下,它应该始终为p3。如果我指定-Dp4,那么p3应该变为非活动状态。
理想情况下,如果我指定-Dp3,p4,maven应该抛出一个错误,但这不是必须的。
知道怎么做吗?
首先,您不通过-D
选项激活配置文件,而是通过命令行的-P
选项激活配置。或者,您可以通过配置文件部分的activation
元素激活配置文件,默认情况下将其设置为活动,或者,如果配置文件是通过activeProfiles
部分在settings.xml
中定义的。
如果指定了不必要的概要文件,Maven不会抛出错误。
因此,如果你想默认激活配置文件3,你可以在其profile
部分设置如下:
<activation>
<activeByDefault>true</activeByDefault>
</activation>
如果您想打开和关闭一个配置文件,请在命令行中的配置文件名称之前使用!
或-
表示法,例如:
mvn clean install -Pp3!p4
它将激活p3配置文件并停用p4配置文件。
请注意,!
字符在bash中是一个特殊的字符,因此您应该将其用单引号括起来。
但是,请注意,从命令行激活配置文件将停用POM中默认活动的配置文件,而不是作为settings.xml的一部分默认活动的概要文件(但是,该机器上的所有Maven构建都将共享该概要文件)。
来自Maven关于配置文件的官方文档
除非使用前面描述的方法之一激活同一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插件及其"要求激活配置文件"规则。配置后,如果没有指定所需的配置文件,则可以使构建失败(因此,是的,在这种情况下,Maven将通过插件而不是开箱即用的功能抛出错误)。