Cloud Foundry中的JDK可用性

时间:2017-04-25 23:18:10

标签: java cloud javac cloudfoundry openjdk

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

为了测试这一点,在我的应用程序中,我使用语句ToolProvider.getSystemJavaCompiler()实例化JavaCompiler并打印出编译器实例。该应用程序部署在CF上并打印出来: com.sun.tools.javac.api.JavacTool@2e68d3ad

以下内容来自日志。

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

两个问题:

  1. 假设在Cloud Foundry上始终可以使用JDK是安全的,所以我可以使用javac。
  2. 为什么在我的代码中实例化的编译器引用了Sun的javac?我期待OpenJDK JDK(即使日志只说下载了JRE)。
  3. 任何见解将不胜感激。谢谢。 -Michelle

1 个答案:

答案 0 :(得分:1)

  

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

构建包未安装javac实用程序。如果仔细观察它的安装,你会发现它正在安装JRE而不是JDK。 JRE只是运行时,不包含javac

  

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

注意它是如何说“Open JDK JRE”的。 “Open 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
  

为什么我的代码中实例化的编译器引用了Sun的javac?我期待OpenJDK JDK(即使日志只说下载了JRE)。

我怀疑是因为OpenJDK来自Sun,所以仍有一些共同的遗产。

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