如何在Windows上從原始碼構建OpenJFX 8

Tybyq發表於2018-12-11

所以你已經聽到了這個訊息。 Oracle震驚世界,改變了Java和相關技術的支援路線圖,釋出週期等。 但是,您的業務'JavaFX應用程式(及其依賴項)在Oracle JDK 8上執行。您喜歡穩定性,因為如果您不這樣做,您的業務軟體可能會失敗,導致您花錢或更糟 - 讓您破產和/或還是欠債

那麼這對Oracle JDK / JavaFX 8的商業使用者意味著什麼呢? 兩件事情:

我們多年來一直受到的第一次免費的公共支援,就像一個與生俱來的權利一樣,很快就會結束。

在2019年1月之後,如果沒有Oracle的商業許可,將不會為“商業,商業或生產用途”提供Oracle JDK 8的公開更新。

第二,JavaFX支援也即將結束。

JavaFX 8的免費支援將提供到2022年3月,JavaFX將從Java SE 11中刪除,Java SE 11已經在我們面前。

“Winging”對於嚴肅的企業來說,它不是一個選擇,因為使用沒有安全更新,錯誤修復或其他支援的Oracle JDK 8充其量只是一個可怕的風險,更糟糕的是,災難性的;  從Java 11開始,企業可能無法在沒有許可證的情況下在生產中使用Oracle JDK 11。

以防你錯過了它

您可以在此處完整地找到Java客戶端路線圖更新文件。  

Oracle Java SE支援路線圖

所以現在怎麼辦?

解決方案: OpenJDK。 到目前為止,OpenJDK顯然是Java和JVM的未來;  有關 更多資訊, 請參見 此處  在某種程度上,這是Sun一直想要的傳真 - 一個免費和開放的Java。 透過上述更改,Oracle為Linux,Mac和Windows提供了二進位制OpenJDK版本。 但是,它不維護或提供OpenJDK 8二進位制檔案。 如果您在Linux機器上執行,這可能不是問題,因為在許多Linux平臺上都維護著OpenJDK發行版。 但是如果你在Windows上呢? 這裡的情況有點不同。

有一些人(例如@chriswhocodes和Sky Land Universal Corporation)提供他們自己的OpenJFX版本。 但是,依靠這些第三方提供OpenJFX構建可能不符合您的需求。 他們欠你什麼,可以在沒有警告的情況下明天關閉。 此外,您將依賴於它們提供的構建的完整性。

然而,好訊息是,由於 OpenJFX (一個OpenJDK專案是Oracle JFX上游),您可以在開放的情況下編譯和構建JavaFX - 在GPL v2下使用Classpath Exception。

此外,由於JavaFX與JVM的分離正在向前發展,因此切換到OpenJFX將使您的業務直接與未來的工作方式保持一致,希望能夠實現更順暢的升級。 但請注意,一家名為Gluon的公司 ,OpenJFX的 事實上的 社群管理員,在您準備進行切換時提供OpenJFX 11版本。 這一切的美麗? 如果你不願意,你不必使用Gluon的版本,儘管它們非常支援並且是JavaFX社群中進化的驅動力。

來自OpenJDK社群的支援

到目前為止,尚未解決2019年1月以後的Java 8支援問題。 這就是神奇的地方。 社群成員,包括但不限於IBM,RedHat,Azul,Eclipse和AdoptOpenJDK,已經提供了支援Java 8支援的計劃,直到2023年(大多數),這是Oracle打算在日期之後的一年。結束對JavaFX的公共支援。

因此,在AdoptOpenJDK之類的分發版上執行OpenJFX將使您的業務能夠在JavaFX 8上保留至少到2022年3月。此外,AdoptOpenJDK為OpenJDK提供二進位制檔案,使您無需構建OpenJDK來自源的二進位制檔案。

出於本文的目的,我們將展示如何在Windows上設定開放式Java / JavaFX解決方案。

先決條件

  • 耐心和希望

  • Windows 10 x64(早期版本和其他架構也可以工作)

  • 一個程式碼(文字)編輯器,如Notepad ++或Sublime,這是首選。

  • 幾GB的空間

路線

  1. 開啟文字編輯器和終端。

  2. 下載AdoptOpenJDK 8 x64( )。 您可以選擇您喜歡的JVM。 但請注意,為了本教程的目的,我選擇了HotSpot。

  3. 提取“OpenJDK8U-jdk_x64_windows_hotspot_8u192b12.zip”的內容或包含OpenJDK的存檔名稱,並複製到您將記住的路徑,例如C:\ java \ adoptOpenJDK \ java8。 將此路徑的純文字以及C:\ java \ adoptOpenJDK8 \ bin複製到所選文字編輯器中的新檔案。

  4. 下載並安裝Cygwin( )。 繼續使用預設值(從Internet安裝,C:\ cygwin64,所有使用者,下載目錄...,使用系統代理設定,選擇一個映象......)對我來說,我建立了C:\ cygwin64 \ downloads並將其用作從命令提示符下載目錄(mkdir C:\ cygwin64 \ downloads。)將C:\ cygwin64 \ bin複製到您的文字檔案,現在列表中有三個目錄。

  5. 在安裝程式提示的select packages階段,選擇並安裝以下軟體包。 當您將檢視更改為pending時,您應該找到所有這些選擇。

6.下載並安裝“Direct SDK June 2010”( )。

7.在文字檔案中,輸入兩個新行,然後將“DSDK_DIR”C:\ Program Files(x86)\ Microsoft DirectX SDK(2010年6月)\“複製到您的文字檔案中。

8.使用TortoiseSVN x64( https://www.mercurial-scm.org/wiki/Download#Windows 下載並安裝Mercurial 

9.下載Gradle 4.8( ),解壓縮,然後將〜\ Downloads \ gradle-4.8-all \ gradle-4.8的內容複製到C:\ gradle這個\ 4.8。 (mkdir C:\ gradle \ 4.8)

10.下載Apache Ant( )並將壓縮的壓縮資料夾的內容解壓縮到C:\ apache \ ant-1.8.2 \。 將“C:\ apache \ ant-1.8.2 \ bin”新增到文字檔案列表中。

11.下載Microsoft Visual Studio 2017 Professional安裝程式,並免費試用( )並執行該應用程式。

12.導航到“安裝位置”。 驗證安裝位置是否為“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional”。

13.導航到“單個元件”。 向下滾動到底部並選中“Windows 8.1 SDK”。 點選安裝並繼續,無需工作負載。

14.重新啟動計算機。

15.設定PATH和環境變數

  • 開啟Windows檔案資源管理器。

  • 將游標拖動到最左側的窗格,然後右鍵單擊“此PC”

  • 在上下文選單下,選擇“屬性”

  • 您現在將位於顯示有關PC的基本資訊的目錄中(控制皮膚\所有控制皮膚專案\系統)。 在左側窗格中,您會注意到“高階系統設定”。 選擇此項。

  • 導航到“高階”選項卡,然後選擇“環境變數”。

  • 你會看到兩個主要的盒子。 第一個名為“<user name here>的使用者變數”,最下面的名稱為“系統變數”。

  • 雙擊“Path”系統變數。

  • 警告: 編輯任何使用者或環境變數時要非常小心。 繼續需要您自擔風險。 未能正確配置環境變數可能導致PC執行不正常。

  • 從文字檔案中新增或確保環境路徑中存在以下目錄,然後單擊“確定”。

C:\ java \ adoptOpenJDK8 \ bin 
C:\ gradle \ 4.8 \ bin 
C:\ apache \ ant-1.8.2 \ bin 
C:\ cygwin64 \ bin 
C:\ Program Files \ TortoiseHg \
JDK_HOME - -C:\ java \ adoptOpenJDK8 
DXSDK_DIR - - C:\ Program Files(x86)\ Microsoft DirectX SDK(2010年6月)\
JAVA_HOME - - C:\ java \ adoptOpenJDK8 VS100COMNTOOLS - - C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ 
WINSDK_DIR - - C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin

16.驗證PATH是否設定正確(如果您願意,可以檢查其他人)

驗證Gradle使用的JVM是否為AdoptOpenJDK版本而不是其他版本! 如果使用Oracle JDK而不是OpenJDK,則構建將失敗。

17.在終端中,執行命令mkdir C:\ java \ javafx

18.在終端中,執行命令chdir C:\ java \ javafx

19.在終端中,執行命令 將OpenJDK源克隆到當前目錄 hg clone .openjdk.java.net /openjfx/8u-dev/rt

20.克隆成功完成後,在文字編輯器中開啟〜/ rt / build.gradle。 導航到第745行 int ib = v.indexOf(" (build"); 您將看到該行 將其更改為以下內容: int ib = v.indexof("(build");

21.導航到第747行。您將看到該行 String ver = v.substring(ib + 8, v.size() - 1); 將其更改為以下內容: String ver = v.substring(ib + 7, v.size()-1);

22.在文字編輯器中開啟〜/ rt / buildSrc / win.gradle。 導航到第142行 ?"WINDOWS_VS_VSINSTALLDIR/VC/BIN/amd64 您將看到該行 將其更改為以下內容 ?"WINDOWS_VS_VSINSTALLDIR/VC/BIN

23. [可選]在終端中,執行命令 gradlew tasks --all 這將顯示此專案的所有可用Gradle任務。

24.在終端中,只需執行命令即可 gradlew

成功的構建過程看起來像這樣。

如何在Windows上從原始碼構建OpenJFX 8

25.執行一些測試。 請注意,OpenJFX中有幾個專案。 透過執行以下命令在基礎專案上執行測試: gradlew :base:test 如果成功,將在~rt / buildSrc / build / reports / tests / test / index.html中提供構建報告

如何在Windows上從原始碼構建OpenJFX 8

26.導航到〜/ rt / apps / samples / build.xml並註釋掉有關Ensemble8的第14行和第20行。

27.在〜/ rt / apps / samples / build.xml中註釋掉第3322-3325行並儲存檔案。 它應該如下所示:

/ *
     ant.project.executeTarget( “scenebuilderSampleAppsJar”)
              if(!t.name.startsWith(“arm”)){
                ant.project.executeTarget( “scenebuilderAppJar”)
              }
     * /


28.在〜/ rt / apps / samples / build.xml和註釋掉第3337-3340行,它應如下所示:

/ *
     ant.project.executeTarget( “scenebuilderSampleAppsClean”)
              if(!t.name.startsWith(“arm”)){
                ant.project.executeTarget( “scenebuilderAppClean”)
              }
     * /


29.執行命令 gradlew zips gradlew zips -Dorg.gradle.java.home-C:\java\adoptOpenJDK8 建立疊加層。 如果成功,它應該如下所示:

如何在Windows上從原始碼構建OpenJFX 8

30.解壓縮〜\ rt \ build \ bundles \ javafx-sdk-overlay.zip。

導航到JAVA_HOME的位置。

將〜\ rt \ build \ bundles \ javafx-sdk-overlay \ bin的內容複製到$ JAVA_HOME \ bin。

將〜\ rt \ build \ bundles \ javafx-sdk-overlay \ lib的內容複製到$ JAVA_HOME \ lib。

將〜\ rt \ build \ bundles \ javafx-sdk-overlay \ jre \ bin的內容複製到$ JAVA_HOME \ jre \ bin。

將〜\ rt \ build \ bundles \ javafx-sdk-overlay \ jre \ lib的內容複製到$ JAVA_HOME \ jre \ lib。

31.刪除解壓縮的資料夾〜\ rt \ build \ bundles \ javafx-sdk-overlay。 針對adoptOpenJDK8 + openJFX8執行一些示例程式碼。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2284844/,如需轉載,請註明出處,否則將追究法律責任。

相關文章