我已经剥离了这个项目,尽可能简单。我正在使用maven-echo-plugin 1 。所有这个项目都是根据deluxe
配置文件是否处于活动状态来回显特定语句。如果我没有使用豪华配置文件,项目将打印出This is the base configuration
。如果我使用豪华配置文件,项目将打印出This is the deluxe configuration
。
我有以下父母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
到目前为止一切顺利:
我现在创建一个孩子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
。
因此,我可以看到子pom正在拾取父配置文件,如果我直接在命令行上激活配置文件,或者使用属性。但是,即使我在pom中设置了属性,我的项目似乎也没有拿起父母的个人资料。
为什么?
1 我使用的是版本0.1,因为它是Maven Central中的最新版本,并且在版本1.0中称为maven-echo-plugin
。否则文档是相同的。
答案 0 :(得分:0)
仅使用系统属性(即命令行)/环境变量以及JDK和OS激活配置文件 ,而不是使用pom属性。 (参见Introduction to Build Profiles:&#34;目前,此检测仅限于JDK版本的前缀匹配,系统属性的存在或系统属性的值。&#34;)
所以,你的方法不能这样做。您可能希望将非对称配置文件作为替代方案。