JDK Cloud Foundry 中的可用性

JDK availability in Cloud Foundry

我正在尝试从 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 -----> 正在下载打开 Jdk JRE 1.8.0_121来自 https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_121.tar.gz(0.5 秒) 2017-04-24T13:23:22.48-0700 [STG/0] OUT 将 Jdk JRE 扩展到 .java-buildpack/open_jdk_jre (1.0s)

两个问题:

  1. 假设 JDK 在 Cloud Foundry 上始终可用是否安全,因此我可以使用 javac.
  2. 为什么我代码中实例化的编译器引用了Sun的javac?我期待 OpenJDK JDK(即使日志说只下载了 JRE)。

任何见解将不胜感激。谢谢。 -米歇尔

Is it safe to assume a JDK is always available on Cloud Foundry, so I can use javac.

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

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

注意它是怎么说的 "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

Why the compiler instantiated in my code refers to Sun's javac? I was expecting OpenJDK JDK( even though the log said only the JRE is downloaded ).

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

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