Java CloudFoundry中的JDK可用性
我试图在CloudFoundry Java应用程序中调用javac,以便在应用程序运行时编译Java文件。我有一个关于使用哪个JDK的问题 为了测试这一点,在我的应用程序中,我使用语句ToolProvider.getSystemJavaCompiler()实例化了一个Java编译器,并打印出编译器实例。该应用程序部署在CF上并打印出来:com.sun.tools.javac.api。JavacTool@2e68d3ad 下面是日志 ----->Java构建包版本:v3.13| 2017-04-24T13:23:21.38-0700[STG/0]OUT----->从(0.5s)下载开放Jdk JRE1.8.0121 2017-04-24T13:23:22.48-0700[STG/0]将开放Jdk JRE扩展到.java buildpack/Open_Jdk_JRE(1.0s) 两个问题:Java CloudFoundry中的JDK可用性,java,cloud,javac,cloud-foundry,openjdk,Java,Cloud,Javac,Cloud Foundry,Openjdk,我试图在CloudFoundry Java应用程序中调用javac,以便在应用程序运行时编译Java文件。我有一个关于使用哪个JDK的问题 为了测试这一点,在我的应用程序中,我使用语句ToolProvider.getSystemJavaCompiler()实例化了一个Java编译器,并打印出编译器实例。该应用程序部署在CF上并打印出来:com.sun.tools.javac.api。JavacTool@2e68d3ad 下面是日志 ----->Java构建包版本:v3.13| 2017-04-2
javac
实用程序。如果您仔细观察它安装的是什么,您会发现它安装的是JRE而不是JDK。JRE只是运行时,不包含javac
2017-04-24T13:23:21.38-0700[STG/0]OUT----->从(0.5s)下载开放Jdk JRE 1.8.0121
注意它是如何说“openjdkjre”的。“openjdk”是Java实现的名称,“JRE”是类型
您可以通过在使用Java构建包部署的应用程序中运行cf ssh
进行确认。如果查看/home/vcap/app/.java buildpack/
,您可以看到安装了什么
这是我在bin
目录下看到的所有内容
~/app/.java-buildpack/open_jdk_jre$ ls bin/
java jcmd jmap keytool orbd policytool rmiregistry tnameserv
java-buildpack-memory-calculator-2.0.2_RELEASE jjs jstack killjava.sh pack200 rmid servertool unpack200
为什么我的代码中实例化的编译器引用Sun的javac?我期待的是OpenJDK JDK(尽管日志上说只有JRE被下载)
我怀疑这是因为OpenJDK来自Sun,所以仍然有一些共同的传统
可以确认:OpenJDK由Sun领导,现在由Oracle领导。有关证明,请查看任何OpenJDK源文件中的版权:。它包含各种
*.oracle.*
包以及*.sun.*
包。要验证它是否是OpenJDK,请查看java-version
的输出。删除我之前的评论并在此处展开@whjte的问题->