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


159

我是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"

2
您可以发布PATH和JAVA_HOME变量吗?
Jeanne Boyarsky 2013年

@JeanneBoyarsky布鲁斯:helloworld忍者$ echo $ JAVA_HOME布鲁斯:helloworld忍者$ echo $ PATH / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin:/ usr / local / git / bin
忍者2013年

@JeanneBoyarsky,这是您想要的吗,先生?
忍者2013年

3
我是女性(所以称我为“先生”是不正确的),是的。请尝试设置您的JAVA_HOME。您的问题似乎与此类似问题:stackoverflow.com/questions/13752519/...
珍妮Boyarsky

2
@JeanneBoyarsky原谅我的无礼。您提供的网址是我遇到的问题。非常感谢〜–
Ninja

Answers:


227

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

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

第二种解决方案:

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


是的,您的回答是正确的。JAVAHOME是必需的。我改为编辑/ etc / profile
Ninja

8
好吧,添加到〜/ .mavenrc可以确保其他应用程序不受影响。只有mvn可以选择此版本的JDK。:)
Gaurav Vaish 2013年

43
export JAVA_HOME = $(// usr / libexec / java_home -v 1.7)
jla 2014年

1
.mavenrc解决方案非常适合我。还意识到我只安装了JDK 1.8,而没有安装JRE 1.8。谢谢高拉夫!
timothyclifford

2
如果在Mac上使用jenv,则可以是:export JAVA_HOME="$HOME/.jenv/versions/`jenv version-name`"for ~/.mavenrcfile。
艾迪(Eddy)

46

进入

/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

现在它将立即开始工作。


1
CurrentJDK symlink技巧似乎不适用于maven 3.3.1,但修改〜/ .mavenrc可以。
Stefan L

41

你也可以

<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>

5
如果maven是使用Java 6运行的,那将不起作用。它只是与[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey一起

27

您还可以明确告诉maven要为其编译哪个Java版本。您可以尝试将maven-compiler-pluginpo 添加到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设置。


哦,谢谢你。但是我还没开始。我只是'mvn -v'...原因是我没有分配JAVA_HOME
Ninja

请注意,这只会影响您编译的代码。我遇到了这个问题,来到这里是因为我正在使用的外部库是针对Java 7编译的,而Maven则尝试使用Java 6运行它

如果maven是使用Java 6运行的,那将不起作用。它只是与[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project {projectname}: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
Gavin S. Yancey一起

如果您的IDE中默认编译器的maven设置低于1.7,但已安装的jdk高于1.7,则此方法将起作用
John Doe

9

它帮助了我。只需将其添加到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>

4

对于Eclipse用户。例如,如果您有一个运行配置可以清除程序包。

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



2

请检查兼容性。我挣扎着mvn 3.2.1,并jdk 1.6.0_37为几个小时。设置了所有变量,但不起作用。最终我升级了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;

1

@MasterGaurav的解决方案非常有效,

我通常将java开关内容放入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以将1.7版本用于Java和Maven。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.