Maven构建配置文件激活

4

我知道有一些相关的话题,但我仍然不明白如何做。

我正在学习maven,并且目前正在创建构建配置文件。我希望maven可以自动检测我的机器上当前安装的java版本。假设我在我们的办公室工作,它使用(jdk7),或者在家中(jdk8),我希望maven-compiler-plugin中的<source><target>元素可以自动检测java -version,而不受环境(办公室/家庭)的影响。我已经阅读了关于activation的内容,但还不能完全理解其目的。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>   
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>    
        </plugin>
    </plugins>
  </build>

不是质疑你的意图,但为什么要反对Java7呢?它的最后一个公共更新是在2015年,现在是时候向前迈进了。 - Scorpio
3个回答

6

您好,我认为只是使用默认值,不能自动地使您的构建环境感知到,您需要一些配置文件和它们的激活能力的帮助,可以在这里找到相关信息。您可以引入两个不同的配置文件,在每个配置文件中定义您想要的JDK,如果存在该JDK,则会激活它,然后您可以配置编译器插件以具有不同的源/目标或仅设置将指示Java版本的属性的不同值。例如:

<profiles>
 <profile>
     <id>java8</id>
     <activation>
       <jdk>1.8</jdk>
     </activation>
   <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>   
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>    
        </plugin>
    </plugins>
  </build>
   </profile>
<profile>
     <id>java7</id>
     <activation>
       <jdk>1.7</jdk>
     </activation>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>   
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>    
        </plugin>
    </plugins>
  </build>
   </profile>
</profiles>

希望这能帮到您:)

5

对于Java 9,可以使用以下配置文件。

    <profiles>
        <profile>
            <id>java8</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            (...)
        </profile>
        <profile>
            <id>java9</id>
            <activation>
                <jdk>9</jdk>
            </activation>
            (...)
        </profile>
    </profiles>

2
或者对于8和8之后的版本:<jdk>1.8</jdk><jdk>[9,)</jdk> - Janaka Bandara

0
您将需要声明两个互斥的配置文件,一个用于jdk7构建,另一个用于jdk8构建。每个配置文件声明都有两个重要部分: 激活元素类似于条件语句,嵌套在其中。您的配置文件是否开启或关闭?您将需要设置基于jdk的激活。以下是您的jdk7配置文件示例:
<activation>
  <jdk>1.7</jdk>
</activation>

接下来,您需要定义在配置文件处于活动状态时设置的属性或属性。jdk7的示例:

<properties>
    <jdk.version>1.7<jdk.version>
</properties>

这两个部分都与一个id元素(例如<id>jdk7</id>)结合,并嵌套在一个profile元素中。

如果您在激活jdk检测时遇到任何问题,建议尝试使用显式触发器进行实验,例如使用mvn -P jdk7调用maven。

从听起来的样子,您想要在pom.xml中定义jdk7和jdk8配置文件。但另一种选择是拥有一个始终开启的单个配置文件,但在您的~/.m2/settings.xml文件中以不同的方式为配置文件定义jdk.version属性。办公室的settings.xml文件将具有jdk7属性;在家里,它将具有jdk8。

http://maven.apache.org/guides/introduction/introduction-to-profiles.html


我已经试图将激活的 jdk 值更改为 1.4 仅供测试,但为什么我仍然得到 jdk.version 的值为 1.7? - Ruelos Joel
如果您设置激活值为1.4,则除非您的JDK版本为1.4,否则属性不会被设置。如果确实设置了它,它将仅设置为在<properties>元素中定义的属性值。执行测试时实际使用的JDK版本是什么?<properties>元素的值是多少? - Ken Koster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接