设置项目pom

时间:2016-11-04 15:28:10

标签: maven maven-profiles

我们有一个企业范围的 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中的默认值。

1 个答案:

答案 0 :(得分:1)

AAAAHGGGGHHHH!

我是在尖叫。

我发现了这个问题以及为什么这不起作用。

在我的父母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.sourcejavac.target,它会覆盖maven-compiler-pluing的配置(即使我已明确设置<source>和{ {1}}不使用版本1.7)。

所以,我在这个问题上花了六个小时才意识到这是因为我设置了一个名为<target>的属性,而不是javac.source