亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JFX11+IDEA跨平臺打包發布的方法

發布時間:2020-07-01 10:27:28 來源:億速云 閱讀:160 作者:清晨 欄目:開發技術

這篇文章主要介紹JFX11+IDEA跨平臺打包發布的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1 概述

IDEA2020.1的文檔中提到只有JFX8的工程才支持打成jar包,并且,如果直接使用Build Artifacts的話,會如下提示:

JFX11+IDEA跨平臺打包發布的方法

IDEA文檔有提到這個的解決辦法,是使用一些第三方工具。里面介紹了通過IDEA結合自身/Maven/Gradle打包發布JFX11以上版本的方法。但是,不足的地方有:

  • 直接創建JFX工程默認只有一個src目錄,不像Maven工程還帶有resources與test,給管理資源文件以及外部依賴造成了困難,getClass().getResource()會出現空指針問題,但是好處是只需具備JDK環境,打包出來的文件能帶上jmods能跨平臺直接運行
  • 直接創建Maven項目雖然是管理依賴以及資源文件方便,但是無論是直接通過Maven打出的jar包還是通過JavaFX Maven Plugins打出來的jar包默認綁定了開發平臺的JFX SDK,簡單地說就是Linux開發的JFX程序不能直接跑在具有JDK環境的Win上,因為用的是Linux的JFX SDK而不是Win的JFX SDK

因此,本文結合這兩者的優點,參照Maven的目錄管理,以JFX工程為基礎,記錄了從新建工程到發布跨平臺JFX應用的過程。

2 環境

  • IDEA 2020.1
  • OpenJDK 11
  • OpenJFX 11 Linux SDK
  • OpenJFX 11 Linux/Windows/Mac OS X jmods

JDK安裝就不說了,JFX直接下載然后在工程中通過外部庫引入即可,三種jmods解壓出來即可,用于最后生成可執行文件時添加的模塊。
下載鏈接戳這里。

3 新建JFX工程

JFX11+IDEA跨平臺打包發布的方法

這里的項目名為TestJFX,對應修改即可。

JFX11+IDEA跨平臺打包發布的方法

4 添加JFX11 SDK

JFX11+IDEA跨平臺打包發布的方法

添加上一步下載的對應平臺的JFX SDK。

JFX11+IDEA跨平臺打包發布的方法

5 添加module-info.java

在src目錄右鍵New->module-info.java,修改如下:

module TestJFX {
  requires javafx.fxml;
  requires javafx.controls;
  
  opens sample to javafx.fxml;
  exports sample;
}

其中TestJFX為新建項目時的項目名,這個創建module-info.java時就默認加上了,sample為默認包,對應修改。

6 添加VM Options

JFX11+IDEA跨平臺打包發布的方法

JFX11+IDEA跨平臺打包發布的方法

添加

--module-path /usr/local/jfx/lib:out/production

其中

/usr/local/jfx/lib

為下載的JFX JDK的lib目錄,后面的out不需要更改,是默認的編譯輸出的目錄。

7 運行

這時候應該可以Shift+F10或者點擊綠色小三角運行了:

JFX11+IDEA跨平臺打包發布的方法

當然內容是空的,因為什么也沒有加。

8 添加資源文件

默認的fxml是放在與Main類同一目錄下的,getResource()也沒有加路徑直接寫上文件名:

JFX11+IDEA跨平臺打包發布的方法

但是這是src文件夾,放個fxml還勉強可以接受,放張圖片總不合適吧?所以,新建一個資源文件夾,把css,fxml什么的都放里面:

JFX11+IDEA跨平臺打包發布的方法

直接在IDEA中移動fxml文件,Main中的引用路徑也自動更改,不得不說這個特性是真的好用,但遺憾的是,拋出了空指針異常。
因此采取絕對路徑來進行讀取文件,通過URL+System.getProperty()指定絕對路徑:

@Override
public void start(Stage primaryStage) throws Exception{
  String path = System.getProperty("user.dir");
  URL fxmlUrl = new URL("file:"+path+"/resources/fxml/sample.fxml");
  Parent root = FXMLLoader.load(fxmlUrl);
  primaryStage.setTitle("Hello World");
  Scene scene = new Scene(root);
  scene.getStylesheets().add(new URL("file:"+path+"/resources/css/1.css").toString());
  primaryStage.setScene(scene);
  primaryStage.show();
}

其中

System.getProperty("user.dir")

獲取項目路徑,注意URL前面要加上“file:”,css的獲取也同理,只不過是需要轉換為String。

9 外部依賴

由于沒有了Maven管理依賴,所以外部依賴的管理會相對麻煩一點,基本上是以jar包的形式手動添加,這里以添加Gson為例,戳這里下載jar包,然后在項目目錄下新建一個lib文件夾,把jar包放進去:

JFX11+IDEA跨平臺打包發布的方法

接著在項目結構中把整個lib文件夾添加到外部庫:

JFX11+IDEA跨平臺打包發布的方法

然后VM Options中添加lib路徑,在上面的VM Options后面加一個冒號和lib就行:

JFX11+IDEA跨平臺打包發布的方法

但是,此時可以IDEA還不能進行補全,最后需要修改module-info.java:

JFX11+IDEA跨平臺打包發布的方法

加一行requires,此時IDEA能夠進行補全了,每個jar包都不同,對應修改即可。

10 制作跨平臺鏡像

運行沒問題之后就可以制作運行時鏡像發布了,終端進入項目根路徑:

jlink --module-path jmod/linux:out/production:lib --add-modules TestJFX --output linux
linux/bin/java -m TestJFX/sample.Main

JFX11+IDEA跨平臺打包發布的方法

其中

jmod/linux

為開發平臺jmod的路徑,可以是絕對路徑,也可以是相對與項目根目錄的相對路徑,out/production與上面的VM Options保持一致。

--add-modules

后面跟的是模塊名,這是在生成module-info.java時指定的,為項目名。

--output

為輸出目錄。
后一條命令中-m指定模塊名,后面跟包名+主類名。
這樣linux平臺的鏡像就制作好了,Mac與Win的同理,只需要把jmod換成對應平臺的jmod即可,但是注意語法有一些差別,Mac的語法同Linux,只需要把jmod路徑換一下,但是注意需要整個工程在對應的平臺進行jlink:

jlink --module-path xxxxx/{MAC_JMOD}:out/production:lib --add-modules TestJFX --output mac
mac/bin/java -m TestJFX/sample.Main

Win的語法有些區別,一樣需要在Win下進行jlink:

jlink --module-path "xxxxx/{WIN_JMOD};out/production" --add-modules TestJFX --output win
win\bin\java -m TestJFX/sample.Main

下面是Win下的截圖:

JFX11+IDEA跨平臺打包發布的方法

以上是JFX11+IDEA跨平臺打包發布的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连州市| 伊宁市| 长白| 汉沽区| 抚宁县| 黎城县| 南投市| 庆城县| 南昌县| 体育| 胶州市| 抚宁县| 广东省| 克东县| 松潘县| 阿巴嘎旗| 晴隆县| 兴和县| 东山县| 宁乡县| 麻江县| 美姑县| 眉山市| 江孜县| 雷山县| 广州市| 阜南县| 鞍山市| 顺昌县| 淄博市| 包头市| 富民县| 乐业县| 余江县| 神木县| 钟祥市| 务川| 获嘉县| 磴口县| 中牟县| 涿鹿县|