【问题标题】:Maven profiles activates on running jdk not on toolchains jdkMaven 配置文件在运行 jdk 而不是在工具链 jdk 上激活
【发布时间】:2020-05-19 05:24:39
【问题描述】:

我正在尝试创建一个 pom,它将:

我已经尝试了 pom.xml 来实现这一点。

测试我正在使用mvn clean help:active-profiles,每个都显示以下内容:

JAVA_HOME=/path/to/jdk/1.8:

The following profiles are active:

 - telstra-ae-sda (source: external)
 - jdk-8 (source: com.example:profile-test:1.0.0-SNAPSHOT)

JAVA_HOME=/path/to/jdk/14:

The following profiles are active:

 - telstra-ae-sda (source: external)
 - jdk-14 (source: com.example:profile-test:1.0.0-SNAPSHOT)

我原以为配置文件会从编译的 JDK 中提取,而不是从正在运行的 JDK 中提取。这是预期的行为吗,以及;有人知道解决方法吗?

以下pom.xml 用于实现此目的:

<?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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>profile-test</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <properties>
    <spring-boot.version>2.3.0.RELEASE</spring-boot.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>14</java.version>
    <!--java.version>1.8</java.version-->
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-toolchains-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>toolchain</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <toolchains>
            <jdk>
              <version>${java.version}</version>
            </jdk>
          </toolchains>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>jdk-8</id>
      <activation>
        <jdk>1.8</jdk>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>${java.version}</source>
              <target>${java.version}</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdk-14</id>
      <activation>
        <jdk>14</jdk>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <release>${java.version}</release>
              <compilerArgs>
                <arg>--enable-preview</arg>
              </compilerArgs>
              <forceJavacCompilerUse>true</forceJavacCompilerUse>
              <parameters>true</parameters>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <argLine>--enable-preview</argLine>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>

【问题讨论】:

  • 你不能用 JDK14 编译 Java 8 吗?
  • 确实可以,但是;像许多我的环境一样,需要为不同的项目构建许多 JDK。也就是说,当使用 spark 和 scala 时,我必须像以后一样使用 JDK 8,而且它不兼容。我通过使用 maven-toolchains-plugin 来解决这个问题,这就是它的意义所在。更糟糕的是,团队安装了多种 JDK 位置(Windows、macOS、Linux)。管理我们自己的toolchain.xml 设置使项目更具可移植性。

标签: java maven maven-toolchains


【解决方案1】:

我想我只是将java.version 属性移动到配置文件本身,并默认保持jdk-8 配置文件处于活动状态。

无论如何,这种方法确实更适合工作流程,因为测试 JDK 14 不是正常模式,最好通过 -P jdk-14 手动激活,而不是更新 java.varsion 属性。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 1970-01-01
    • 2016-12-16
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2012-05-09
    相关资源
    最近更新 更多