2017-04-25 39 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