为什么 child pom 没有选择正确的配置文件?
Why isn't the child pom picking the right profile?
我已将此项目精简为尽可能简单。我正在使用 maven-echo-plugin1。该项目所做的只是根据 deluxe
配置文件是否处于活动状态来回显特定语句。如果我没有使用 deluxe 配置文件,项目会打印出 This is the base configuration
。如果我使用的是豪华配置文件,项目会打印出 This is the deluxe configuration
.
我有以下 parent pom:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.weintraub</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<profiles>
<profile>
<id>deluxe</id>
<activation>
<property>
<name>deluxe</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>maven-echo-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<goals>
<goal>echo</goal>
</goals>
<phase>validate</phase>
<configuration>
<echos>
<echo>This is the deluxe configuration</echo>
</echos>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>maven-echo-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<goals>
<goal>echo</goal>
</goals>
<phase>validate</phase>
<configuration>
<echos>
<echo>This is the base configuration</echo>
</echos>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
如果我运行:
$ mvn validate
这将打印出 This is the base configuration
。
如果我运行:
$ mvn -Pdeluxe 验证
这将打印出 This is the deluxe configuration
目前一切顺利:
我现在创建一个 child pom:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<deluxe>true</deluxe>
</properties>
<parent>
<groupId>name.weintraub</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>name.weintraub</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
</project>
请注意,我在 pom 的开头将 属性 deluxe
设置为 true
。
当我运行:
$ mvn validate
打印出This is the base configuration
.
如果我运行这样:
mvn -Ddeluxe=true validate
然后打印 This is the deluxe configuration
。如果我这样做
mvn -Pdeluxe validate
它打印出 This is the deluxe configuration
.
所以,我可以看到 child pom 正在获取 parent 配置文件,如果我直接在命令行上激活配置文件,或者使用 属性.但是,即使我在 pom 本身中设置了 属性,我的项目似乎也没有选择 parent 的配置文件。
为什么?
1 我使用的是 0.1 版,因为这是 Maven Central 中的最新版本,在 1.0 版中它被称为 maven-echo-plugin
。其他方面的文档是相同的。
配置文件 只能 使用系统属性(即命令行)/环境变量以及 JDK 和 OS 激活,而不是使用 pom 属性. (参见 Introduction to Build Profiles:"Currently, this detection is limited to prefix-matching of the JDK version, the presence of a system property or the value of a system property.")
所以,你的方法不能那样工作。您可能想看看非对称配置文件作为替代方案。
我已将此项目精简为尽可能简单。我正在使用 maven-echo-plugin1。该项目所做的只是根据 deluxe
配置文件是否处于活动状态来回显特定语句。如果我没有使用 deluxe 配置文件,项目会打印出 This is the base configuration
。如果我使用的是豪华配置文件,项目会打印出 This is the deluxe configuration
.
我有以下 parent pom:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.weintraub</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<profiles>
<profile>
<id>deluxe</id>
<activation>
<property>
<name>deluxe</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>maven-echo-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<goals>
<goal>echo</goal>
</goals>
<phase>validate</phase>
<configuration>
<echos>
<echo>This is the deluxe configuration</echo>
</echos>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>com.soebes.maven.plugins</groupId>
<artifactId>maven-echo-plugin</artifactId>
<version>0.1</version>
<executions>
<execution>
<goals>
<goal>echo</goal>
</goals>
<phase>validate</phase>
<configuration>
<echos>
<echo>This is the base configuration</echo>
</echos>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
如果我运行:
$ mvn validate
这将打印出 This is the base configuration
。
如果我运行:
$ mvn -Pdeluxe 验证
这将打印出 This is the deluxe configuration
目前一切顺利:
我现在创建一个 child pom:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<deluxe>true</deluxe>
</properties>
<parent>
<groupId>name.weintraub</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<groupId>name.weintraub</groupId>
<artifactId>foo</artifactId>
<version>1.0.0</version>
</project>
请注意,我在 pom 的开头将 属性 deluxe
设置为 true
。
当我运行:
$ mvn validate
打印出This is the base configuration
.
如果我运行这样:
mvn -Ddeluxe=true validate
然后打印 This is the deluxe configuration
。如果我这样做
mvn -Pdeluxe validate
它打印出 This is the deluxe configuration
.
所以,我可以看到 child pom 正在获取 parent 配置文件,如果我直接在命令行上激活配置文件,或者使用 属性.但是,即使我在 pom 本身中设置了 属性,我的项目似乎也没有选择 parent 的配置文件。
为什么?
1 我使用的是 0.1 版,因为这是 Maven Central 中的最新版本,在 1.0 版中它被称为 maven-echo-plugin
。其他方面的文档是相同的。
配置文件 只能 使用系统属性(即命令行)/环境变量以及 JDK 和 OS 激活,而不是使用 pom 属性. (参见 Introduction to Build Profiles:"Currently, this detection is limited to prefix-matching of the JDK version, the presence of a system property or the value of a system property.")
所以,你的方法不能那样工作。您可能想看看非对称配置文件作为替代方案。