为什么不关闭-maven-plugin会选择正确的Java版本?

时间:2015-10-17 22:19:07

标签: java maven clojure

我尝试使用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.所以我的预感是在编译时,closure-maven-plugin没有获得正确的Java版本。如何编译这个项目?

1 个答案:

答案 0 :(得分:2)

您需要确保$JAVA_HOME/bin(或至少1.7 java可执行文件)位于PATH的第一位,因为这是它的用途。插入。

JAVA_HOME指向JDK 1.7,我能够通过在java中首先设置PATH(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";
  }
相关问题