Java 为什么Grails在MacOSX7上使用旧的JVM编译器?
Mac OS x 10.7Java 为什么Grails在MacOSX7上使用旧的JVM编译器?,java,macos,grails,jvm,java-compiler-api,Java,Macos,Grails,Jvm,Java Compiler Api,Mac OS x 10.7 grails> !java -version java version "1.7.0_13" Java(TM) SE Runtime Environment (build 1.7.0_13-b20) Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode) grails> !which java /Library/Java/JavaVirtualMachines/jdk1.7.0_13.
grails> !java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
grails> !which java
/Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home/bin/java
我想在其中一个服务中使用Java 1.7 NIO,我得到了以下结果:
grails> run-app
...
| Error Compilation error: startup failed:
/path/to/Acquiring.groovy: 7: unable to resolve class java.nio.file.FileSystems
@ line 7, column 1.
import java.nio.file.FileSystems
^
/path/to/Acquiring.groovy: 8: unable to resolve class java.nio.file.Path
@ line 8, column 1.
import java.nio.file.Path
^
2 errors
| Error Error running script run-app : org.codehaus.groovy.grails.cli.ScriptExitException (Use --stacktrace to see the full trace)
真见鬼!?好啊我正在检查代码中的java版本:println
println System.getProperty("java.version").startsWith('1.6')?
"I use 1.6?! WTF?!":"It's ok"
我终于明白了
I use 1.6?! WTF?!
或者更具体地说
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
println System.getProperty("java.version").startsWith('1.6')?"I use 1.6?! WTF?!":"It's ok";
println "VM_vmVendor: " + RuntimemxBean.vmVendor
println "VM_getName: " + RuntimemxBean.getName()
println "VM_getVmVersion: " + RuntimemxBean.getVmVersion()
println "VM_getVmName: " + RuntimemxBean.getVmName()
println "VM_namevendor: " + RuntimemxBean.getLibraryPath()
println "VM_getSystemProperties:" +
"\n ================= \n" + RuntimemxBean.getSystemProperties() +
"\n ================= "
List<String> arguments = RuntimemxBean.getInputArguments();
arguments.each { print it+ "\n" }
我也有同样的问题,Grails使用的是来自/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK的java。您可以通过将Grails指向$JAVA_HOME来强制它使用不同的版本-将以下内容添加到~/.profile或global one/etc/profile中
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home; export JAVA_HOME
源配置文件和Grails应在1.7.0_13版本上运行
注意:我不是Java开发人员,我需要快速启动并运行grails——这可能不是我推荐的最佳答案
export JAVA_HOME=$(/usr/libexec/java_home)
在您的.profile
、.bashrc
或登录时来源的其他文件中
请参见是否即使拥有Java 7,您的路径上也有Java 6,而您的IDE正在实现这一点?需要更多信息。你是从一个想法出发的吗?如果是,哪一个?如果没有,您将如何从命令行执行它?这可能会起作用,但在Java更新后需要手动更新。如果您愿意,可以使用它来测试设置JAVA_HOME是否会有所不同,但我不建议将其作为最终解决方案。
export JAVA_HOME=$(/usr/libexec/java_home)