繁体   English   中英

为什么 Maven 使用 JDK 1.6 但我的 java -version 是 1.7

[英]Why Maven uses JDK 1.6 but my java -version is 1.7

我是 maven 的新手,也是 MacOS 的新手。

我在终端中设置了 maven,在获取版本设置(使用mvn -v )时,它似乎使用了 JDK 1.6,而我安装了 JDK 1.7。 有什么问题吗?

我输入的命令是这些:

blues:helloworld Ninja$ java -version
 java version "1.7.0_05" Java(TM) SE Runtime Environment (build 1.7.0_05-b06) Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)`
blues:helloworld Ninja$ mvn -v
 Apache Maven 3.1.0 (893ca28a1da9d5f51ac03827af98bb730128f9f2; 2013-06-28 10:15:32+0800) Maven home: /usr/local/Cellar/maven/3.1.0/libexec Java version: 1.6.0_51, vendor: Apple Inc. Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Default locale: zh_CN, platform encoding: EUC_CN OS name: "mac os x", version: "10.8.4", arch: "x86_64", family: "mac"

将以下内容添加到您的~/.mavenrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{jdk-version}/Contents/Home

第二种解决方案:

echo export "JAVA_HOME=\\$(/usr/libexec/java_home)" >> ~/.bash_profile

进入

/System/Library/Frameworks/JavaVM.framework/Versions

并更新CurrentJDK符号链接以指向

/Library/Java/JavaVirtualMachines/YOUR_JDK_VERSION/Contents/

例如

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/ CurrentJDK

现在它将立即起作用。

你也可以这样做,

<properties>
      ...  

      <!-- maven-compiler-plugin , aka JAVA Compiler 1.7 -->
      <maven.compiler.target>1.7</maven.compiler.target>
      <maven.compiler.source>1.7</maven.compiler.source>

      ...  
</properties>

您还可以明确告诉 Maven 编译哪个 Java 版本。 您可以尝试将maven-compiler-plugin到您的 pom 中。

<project>
  [...]
  <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>
  [...]
</project>

如果您将 Maven 项目导入 IDE,那么您的 IDE 中可能有一个 Maven 设置,用于您的 Maven 运行器正在使用的默认编译器。

它帮助了我。 只需将它添加到您的 pom.xml 中即可。

默认情况下,maven 编译器插件使用 Java 1.5 或 1.6,您必须在 pom.xml 中重新定义它。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

对于 Eclipse 用户。 例如,如果您有一个执行清理包的运行配置。

在 Run Configuration 面板中有一个 JRE 选项卡,您可以在其中指定它应该针对哪个运行时运行。 请注意,此配置会覆盖 pom.xml 中的任何内容。

我对这个问题迟到了,但我认为在 MacOS 上处理 JDK 版本的最佳方法是使用以下描述的脚本: http : //www.jayway.com/2014/01/15/how-to-switch-jdk -version-on-mac-os-x-maverick/

请检查兼容性。 我在mvn 3.2.1jdk 1.6.0_37了好几个小时。 所有变量都已设置但不起作用。 最后我将jdk to 1.8.0_60升级jdk to 1.8.0_60mvn 3.3.3并且成功了。 环境变量如下:

JAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_60 
MVN_HOME=C:\ProgramFiles\apache-maven\apache-maven-3.3.3 
M2=%MVN_HOME%\bin extend system level Path- ;%M2%;%JAVA_HOME%\bin;

@MasterGaurav 的解决方案完美无缺。

我通常将 Java switch 语句放入 zsh 函数中:

alias java_ls='/usr/libexec/java_home -V 2>&1 | grep -E "\d.\d.\d[,_]" | cut -d , -f 1 | colrm 1 4 | grep -v Home'

function java_use() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    echo export "JAVA_HOME=$(/usr/libexec/java_home -v $1)" > ~/.mavenrc
    export PATH=$JAVA_HOME/bin:$PATH
    java -version
}

您可以运行java_ls来获取机器上所有可用的 JVM,
然后java_use 1.7为 Java 和 Maven 使用 1.7。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM