我们有一个企业范围的 Super Pom ,用于定义我们使用的许多默认值。例如, Super Pom 定义要使用的JDK版本以及其他参数。这是我们的项目作为父pom继承的。
我们的大多数项目都使用JDK 1.7,但是一组项目仍然使用JDK 1.6版本。我已将以下配置文件定义放在我的父pom中:
<properties>
<travelclick.snapshot.repo>artifactory/libs-snapshot-local</travelclick.snapshot.repo>
<old.javac.source>1.5</old.javac.source>
<old.javac.target>1.6</old.javac.target>
</properties>
<profiles>
...
<profile>
<id>jdk1.6</id>
<build>
<plugins>
<plugin>
<groupId>com.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<...>
<source>${old.javac.source}</source>
<target>${old.javac.target}</target>
<...>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<...>
</profiles>
现在,我有一个名为jdk1.6
的个人资料,我想在项目的pom中指定默认情况下应该使用这个。我该怎么做?
我已尝试添加到该项目的pom中:
<profiles>
<profile>
<id>jdk1.6</id>
<activations>
<activeByDefault>true</activeByDefault>
</activations>
</profile>
</profile>
但是重新定义了我的jdk1.6配置文件。
我试过这个:
<activeProfiles>
<activeProfile>jdk1.6</activeProfile>
</activeProfiles>
但这仅适用于settings.xml
。
如何在父pom中指定配置文件,然后说这是子pom中的活动配置文件?
我尝试过使用属性。在我的父pom.xml中:
<profiles>
<profile>
<id>jdk1.6</id>
<activation>
<property>
<name>use-jdk1.6</name>
</property>
</activation>
<profile>
</profiles>
以下是我当地的pom:
<properties>
<use-jdk1.6>true</use-jdk1.6>
</properties>
但是,它并没有拿起配置文件。而且,这确实有效:
$ mvn -Puse-jdk1.6 clean package site
所以,我知道父配置文件可以正常工作。
您是否可以添加您的个人资料详细信息,提供目标帮助:all-profiles
[INFO] Listing Profiles for Project: xxxx
Profile Id: artifactory (Active: true , Source: settings.xml)
Profile Id: jdk1.6 (Active: false , Source: pom)
Profile Id: arse-version (Active: false , Source: pom)
Profile Id: urge (Active: false , Source: pom)
我可以从命令行激活jdk1.6。我只是想将它激活为我孩子poms中的默认值。
答案 0 :(得分:1)
我是在尖叫。
我发现了这个问题以及为什么这不起作用。
在我的父母pom中,我有以下内容:
<properties>
<javac.source>1.7</javac.source>
<javac.source>1.7</javac.source>
<old.javac.source>1.7</old.javac.source>
<old.javac.source>1.7</old.javac.source>
...
</properties>
<profiles>
<profile>
<id>jdk1.6</id>
<activation>
<property>
<name>use-jdk1.6</name>
</property>
</activation>
<build>
<plugins>
....
<plugin>
<groupId>maven-compiler-plugin</groupId>
...
<configuration>
<!-- This isn't doing what I think -->
<source>${old.javac.source}</source>
<target>${old.javac.target}</source>
...
</configuration>
</plugin>
</plugins>
<profile>
在我的孩子pom中,我有这个:
<properties>
<use-jdk1.6>true</use-jdk1.6>
</properties>
并且,似乎设置use-jdk1.6
属性并不起作用。然而,事实并非如此。我正在设置个人资料。
如果我设置了系统属性javac.source
和javac.target
,它会覆盖maven-compiler-pluing
的配置(即使我已明确设置<source>
和{ {1}}不使用版本1.7)。
所以,我在这个问题上花了六个小时才意识到这是因为我设置了一个名为<target>
的属性,而不是javac.source
。