Cloud Foundry 中的 JDK 可用性 [英] JDK availability in Cloud Foundry

查看:21
本文介绍了Cloud Foundry 中的 JDK 可用性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从 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#03b493f2017-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)2017-04-24T13:23:22.48-0700 [STG/0] OUT 将 Open Jdk JRE 扩展到 .java-buildpack/open_jdk_jre (1.0s)

两个问题:

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

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

解决方案

假设 JDK 在 Cloud Foundry 上始终可用是否安全,因此我可以使用 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"是如何写的.Open JDK"是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 tnameservjava-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

I am trying to call javac from within a Cloud Foundry Java app to compile a java file during runtime of the app. I have a question about which JDK is being used.

To test this, in my app, I instantiated a JavaCompiler using statement ToolProvider.getSystemJavaCompiler() and print out the compiler instance. The app was deployed on CF and printed out: com.sun.tools.javac.api.JavacTool@2e68d3ad

The following came from the log.

-----> Java Buildpack Version: v3.13 | https://github.com/cloudfoundry/java-buildpack.git#03b493f 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) 2017-04-24T13:23:22.48-0700 [STG/0] OUT Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.0s)

Two questions:

  1. Is it safe to assume a JDK is always available on Cloud Foundry, so I can use javac.
  2. 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 ).

Any insight will be appreciated. Thanks. -Michelle

解决方案

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

The javac utility is not installed by the build pack. If you look closely at what it is installing, you'll see that it's installing a JRE and not a JDK. The JRE is just the runtime and does not contain 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)

Note how it says "Open JDK JRE". "Open JDK" is the name of the Java implementation and "JRE" is the type.

You can confirm by running cf ssh into an app deployed with the Java build pack. If you look at /home/vcap/app/.java-buildpack/, you can see what all is installed.

This is all that I see under the bin directory.

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

I suspect that it's because OpenJDK came out of Sun, so there is still some shared heritage.

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

这篇关于Cloud Foundry 中的 JDK 可用性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆