2017-04-25 75 views
0

我试图从Cloud Foundry Java应用程序中调用javac,以在应用程序的运行时期间编译java文件。我有一个关于使用哪个JDK的问题。Cloud Foundry中的JDK可用性

为了测试这个,在我的应用程序中,我使用语句ToolProvider.getSystemJavaCompiler()实例化了一个JavaCompiler并打印出编译器实例。该应用程序部署在CF上并打印出来:[email protected]

以下内容来自日志。

-----> Java Buildpack版本:v3.13 | https://github.com/cloudfoundry/java-buildpack.git#03b493f 2017-04-24T13:23:21.38-0700 [STG/0] OUT ----->正在下载打开Jdk JRE 1.8.0_121从https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_121.tar.gz(0.5s) 2017-04-24T13:23:22.48 -0700 [STG/0] OUT扩大开放jdk的JRE到的.java-buildpack/open_jdk_jre(1.0秒)

两个问题:

  1. 它是安全的假设JDK始终可用在Cloud Foundry,所以我可以使用javac。
  2. 为什么编译器在我的代码中实例化是指Sun的javac?我曾期待过OpenJDK JDK(即使日志说只有JRE被下载)。

任何洞察力将不胜感激。谢谢。 -Michelle

回答

1

假设在Cloud Foundry上始终提供JDK是安全的,因此我可以使用javac。

javac实用程序未由构建包安装。如果仔细查看它正在安装的内容,您会看到它正在安装JRE而不是JDK。 JRE只是运行时间,不包含javac

2017-04-24T13:23:21.38-0700 [STG/0] OUT ----->下载打开jdk的JRE 1.8.0_121从https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_121.tar.gz(0.5秒)

注意如何它说“打开JDK JRE”。 “打开JDK”是Java实现的名称,“JRE”是类型。

您可以通过将cf ssh运行到使用Java构建包部署的应用程序中进行确认。如果您查看/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 

为什么在我的代码实例化编译器指的是太阳的javac?我曾期待过OpenJDK JDK(即使日志说只有JRE被下载)。

我怀疑这是因为OpenJDK是从Sun出来的,所以还是有一些共享的遗产。

https://en.wikipedia.org/wiki/OpenJDK#History

+0

能否证实:OpenJDK的是由Sun领导,现在正在由Oracle领导。为了证明OpenJDK源文件中的版权:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/5534221c23fc。它包含各种'* .oracle。*'软件包以及'* .sun。*'软件包。为了验证它是否是OpenJDK,请查看'java -version'的输出。 – omajid