【问题标题】:Run maven using a different version of Java than the one used to run maven使用与运行 maven 不同的 Java 版本运行 maven
【发布时间】:2017-06-13 11:24:17
【问题描述】:

我正在使用 maven 3.2.5 构建我的项目,这个版本的 maven 与 java 6 兼容。

我想构建一个使用 java 5 和 maven-enforcer-plugin 强制执行的项目。

如果我将 JAVA_HOME 设置为 java 5 目录,我将无法运行 maven,如果我将 JAVA_HOME 设置为 java 6 目录,则执行器插件会抱怨 java 版本。

有没有办法告诉 maven 使用与运行 maven 不同的 java 版本?

【问题讨论】:

  • 为什么要用java 5构建??????
  • 这是我从同事那里收到的旧代码,他在 pom 文件中强制使用它!
  • 你可能应该(我会)在这个项目上使用最新的 java 编译器。如果出于某种原因你真的需要用java 5运行它然后enforce the language level to 1.5
  • @RC 在某些情况下,除了通过源/目标语言级别之外,确实需要使用正确的 JDK 是不够的。
  • 我有一个简单的例子。如果您的语言级别是 1.5 但您的 JDK 是 1.6。你可以使用像String.isEmpty() 这样的东西,但问题是isEmpty() 可从JDK 6 获得,而不是从1.5 获得,并且源代码/目标不会阻止这一点。如果您也使用animal-sniffer-maven-plugin 之类的东西,则可以防止这种情况发生。

标签: java maven java-home maven-enforcer-plugin


【解决方案1】:

在这种情况下,您需要使用可以准确解决问题的工具链。就像使用 JDK 7(例如 Maven 3.5.0)运行 Maven,但需要使用 JDK 6 编译和测试代码。

请参阅有关 toolchains 的文档。

【讨论】:

    【解决方案2】:

    您可以使用maven编译器插件来设置您要使用哪个javac,例如:

       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
          <verbose>true</verbose>
          <fork>true</fork>
          <executable>WRITE HERE THE PATH TO YOUR JAVAC 1.5</executable>
          <compilerVersion>1.5</compilerVersion>
        </configuration>
      </plugin>
    

    【讨论】:

    • 这将无法正常工作。导致在这种情况下未正确设置引导类路径。通过此设置,可以使用 JDK 6 方法(例如 String.isEmpty()),但如果您在 JRE 5 上运行,这将失败...处理此问题的唯一正确方法是使用工具链...除了使用javac 是一回事,但是在哪个 JRE/JDK 上运行测试呢?
    【解决方案3】:

    右键项目

    • 点击属性
    • 点击项目方面
    • 选择java版本
    • 点击应用

    【讨论】:

    • 这无济于事。这不会改变 Maven 中的任何事情。如果您使用 Maven,那么唯一的真理是在 Maven 中,而不是在 Ecipse 中......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多