为什么maven使用jdk 1.6,但是我的java -version是1.7

我是新手,也是MacOS。 我已经在我的terminal中设置了maven,在获取版本设置(使用mvn -v )时,似乎使用JDK 1.6,而我已经安装了JDK 1.7。 有什么不对吗?

我input的命令是:

 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 

第二个scheme:

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中,那么您的Maven runner可能会在默认编译器中使用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用户。 如果你有一个运行configuration,干净的包例如。

在“运行configuration”面板中,有一个JRE选项卡,您可以在其中指定运行它的运行时间。 请注意,此configuration将覆盖pom.xml中的所有内容。

我迟到了这个问题,但我认为在MacOS上处理JDK版本的最好方法是使用下面描述的脚本: http : //www.jayway.com/2014/01/15/how-to-switch-jdk -version上-MAC-OS-X-特立独行/

请检查兼容性。 我挣扎了mvn 3.2.1jdk 1.6.0_37好几个小时。 所有的variables都已设置,但没有工作。 最后,我把jdk to 1.8.0_60升级jdk to 1.8.0_60mvn 3.3.3 。 环境variables如下:

 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的解决scheme是完美的工作,

我通常把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来为java和maven使用1.7版本。