Java 为什么Grails在MacOSX7上使用旧的JVM编译器?

Java 为什么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.

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