【问题标题】:Why doesn't closure-maven-plugin pick up the correct Java version?为什么closure-maven-plugin 没有选择正确的Java 版本?
【发布时间】:2016-01-16 11:42:42
【问题描述】:

我正在尝试使用 JDK 7 编译 Storm Starter。

$ echo $JAVA_HOME                                                                                                 [master] 
/opt/jdk1.7.0_80

$ mvn -version
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.7.0_80, vendor: Oracle Corporation
Java home: /opt/jdk1.7.0_80/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-65-generic", arch: "amd64", family: "unix"

$ mvn clean install -DskipTests=true
                ...
[INFO] --- clojure-maven-plugin:1.7.1:compile (compile-clojure) @ storm-core ---
Compiling backtype.storm.LocalDRPC to /home/incubator-storm/storm-core/target/classes

Exception in thread "main" java.lang.UnsupportedClassVersionError: backtype/storm/ILocalDRPC : Unsupported major.minor version 51.0, compiling:(backtype/storm/LocalDRPC.clj:17:1)
Caused by: java.lang.UnsupportedClassVersionError: backtype/storm/ILocalDRPC : Unsupported major.minor version 51.0

根据this线程,我使用了错误的Java版本,我应该使用Java 7。但是我的Java版本是 7。所以我的直觉是闭包maven -plugin 在编译时没有选择正确的 Java 版本。怎样才能让这个项目编译?

【问题讨论】:

  • mvn -version 的输出是什么?

标签: java maven clojure


【解决方案1】:

您需要确保 $JAVA_HOME/bin(或至少 1.7 java 可执行文件)在您的 PATH 中首先出现,因为这是插件使用的。

由于 JAVA_HOME 指向 JDK 1.7,我可以通过在我的 PATH 中首先将路径设置为 java(JDK 1.6 目录)来复制此问题。 clojure-maven-plugin 代码尝试确定此路径并回退到在当前环境中仅使用 java/PATH:

 private String getJavaExecutable() throws MojoExecutionException {

    Toolchain tc = toolchainManager.getToolchainFromBuildContext("jdk", //NOI18N
                                                                 session);
    if (tc != null) {
      getLog().info("Toolchain in clojure-maven-plugin: " + tc);
      String foundExecutable = tc.findTool("java");
      if (foundExecutable != null) {
        return foundExecutable;
      } else {
        throw new MojoExecutionException("Unable to find 'java' executable for toolchain: " + tc);
      }
    }

    return "java";
  }

【讨论】:

  • 是的,这是一个全新的 git 克隆。我想我用不同版本的 Java 构建了closure-maven-plugin,并且可能缓存在某个地方。这是mvn install -DskipTests的错误输出的链接:pastebin.com/MmhZVe4w
  • 看起来clojure-maven-plugin juse 使用了您当前环境中的任何内容,包括 Clojure 版本和 JDK。工具链中的某些东西只是退回到PATH 中的“java”命令,而不是转到JAVA_HOME/bin。似乎这是第 247 行的后备 - github.com/talios/clojure-maven-plugin/blob/…
  • 好的,我跑了sudo update-alternatives --install /usr/bin/java java $JAVA_HOME/bin/java 0,然后是sudo update-alternatives java。安装完成后我会更新,但现在mvn install 似乎运行良好:)
  • 是的,做到了!所以我的问题是我的 PATH 上的 java 与 $JAVA_HOME 中的 java 不匹配。如果您编辑答案,我会接受。
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多