jdk11 javafx_JDK 11上的JavaFX
jdk11 javafx
在JFX第11版發(fā)布后,人們對(duì)JavaFX與JDK的解耦感到百感交集。 我們?cè)S多人認(rèn)為現(xiàn)在是時(shí)候告別JavaFX并改用另一種GUI技術(shù)了,而另一些人對(duì)此情況感到高興。 他們認(rèn)為,將JavaFX與Oracle分離開(kāi)來(lái),并致力于將其作為開(kāi)源社區(qū)驅(qū)動(dòng)的項(xiàng)目進(jìn)行開(kāi)發(fā),對(duì)于JavaFX來(lái)說(shuō),是一個(gè)獲得更大發(fā)展的絕好機(jī)會(huì)。 我屬于后者。 盡管我可能擔(dān)心JavaFX的發(fā)展方式,但我堅(jiān)信,憑借Java Modularity和JPMS所帶來(lái)的功能,擁有一個(gè)單獨(dú)的JavaFX模塊確實(shí)令人著迷。 您可以只將該模塊包含到您的項(xiàng)目中,使用“ jlink”工具和BOOM創(chuàng)建自定義運(yùn)行時(shí)映像! 您只有一個(gè)精美的模塊化項(xiàng)目,可以輕松在其他地方運(yùn)輸和運(yùn)行該項(xiàng)目。
您可能會(huì)問(wèn)自己:“如何?”。 這基本上就是我將在本文中為您說(shuō)明的內(nèi)容。 我將向您展示如何使用Maven創(chuàng)建模塊化項(xiàng)目。
環(huán)境:
我正在“搶先體驗(yàn)”上使用JDK 11。 您可以從以下鏈接下載它: http : //jdk.java.net/11/
$ java --version java 11-ea 2018-09-25 Java(TM) SE Runtime Environment 18.9 (build 11-ea+24) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11-ea+24, mixed mode)還有Apache Maven
$ mvn --version Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T23:03:14+04:30) Maven home: C:\Program Files\Maven\apache-maven-3.5.4 Java version: 11-ea, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11 Default locale: en_US, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"創(chuàng)建一個(gè)項(xiàng)目:
我的項(xiàng)目有2個(gè)模塊。 一個(gè)模塊是邏輯 ,而另一個(gè)模塊是與JavaFX相關(guān)的代碼所屬的GUI 。
這是項(xiàng)目結(jié)構(gòu):
javafx11-demo │ pom.xml │ ├───gui │ │ pom.xml │ │ │ └───src │ └───main │ └───java │ │ module-info.java │ │ │ └───com │ └───mhrimaz │ └───gui │ GUIMain.java │ └───logic│ pom.xml│└───src└───main└───java│ module-info.java│└───com└───mhrimaz└───logicCoolLogic.java配置“ pom.xml”:
這是根pom.xml的內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>logic</module><module>gui</module></modules><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>11</source><target>11</target><showWarnings>true</showWarnings><showDeprecation>true</showDeprecation></configuration><dependencies><dependency><groupId>org.ow2.asm</groupId><artifactId>asm</artifactId><version>6.2</version></dependency></dependencies></plugin></plugins></build> </project>基本上,我正在配置maven編譯器插件并將其配置為Java11。請(qǐng)注意,我定義了兩個(gè)模塊: 邏輯和gui 。
對(duì)于邏輯模塊,pom.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>logic</artifactId><version>1.0-SNAPSHOT</version></project>最后,對(duì)于gui模塊,我們將其pom.xml定義如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mhrimaz</groupId><artifactId>javafx11-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>gui</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.mhrimaz</groupId><artifactId>logic</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>11-ea+19</version></dependency></dependencies></project>請(qǐng)注意,這里有兩個(gè)依賴項(xiàng),一個(gè)是對(duì)邏輯模塊的依賴關(guān)系,因?yàn)槊總€(gè)gui都需要邏輯,而另一個(gè)是對(duì)javafx -controls模塊的依賴關(guān)系。
配置“ module-info.java”:
如果您不熟悉Java模塊化概念,建議您閱讀其他有關(guān)JPMS和模塊化的文章。
我們應(yīng)該導(dǎo)出“ com.mhrimaz.logic”包,以使其在我們的模塊之外可以訪問(wèn)。
module logic{exports com.mhrimaz.logic; }對(duì)于gui模塊,我們應(yīng)該做幾件事,首先,我們需要邏輯模塊。 另一件事是,我們應(yīng)該需要javafx.controls模塊。 最后,出于JavaFX的考慮,我們應(yīng)該打開(kāi)“ com.mhrimaz.gui”包以進(jìn)行運(yùn)行時(shí)深度反射訪問(wèn)。 我們將完成以下配置:
module gui{requires logic;requires javafx.controls;opens com.mhrimaz.gui to javafx.graphics; }最后步驟:
為了編譯和構(gòu)建模塊,請(qǐng)輸入以下命令:
mvn clean install這將為您編譯并構(gòu)建模塊。 最后,您將具有以下層次結(jié)構(gòu):
C:. │ pom.xml │ ├───gui │ │ pom.xml │ │ │ ├───src │ │ └───main │ │ └───java │ │ │ module-info.java │ │ │ │ │ └───com │ │ └───mhrimaz │ │ └───gui │ │ GUIMain.java │ │ │ └───target │ │ gui-1.0-SNAPSHOT.jar │ │ │ ├───classes │ │ │ module-info.class │ │ │ │ │ └───com │ │ └───mhrimaz │ │ └───gui │ │ GUIMain.class │ │ │ ├───generated-sources │ │ └───annotations │ ├───maven-archiver │ │ pom.properties │ │ │ └───maven-status │ └───maven-compiler-plugin │ └───compile │ └───default-compile │ createdFiles.lst │ inputFiles.lst │ └───logic│ pom.xml│├───src│ └───main│ └───java│ │ module-info.java│ ││ └───com│ └───mhrimaz│ └───logic│ CoolLogic.java│└───target│ logic-1.0-SNAPSHOT.jar│├───classes│ │ module-info.class│ ││ └───com│ └───mhrimaz│ └───logic│ CoolLogic.class│├───generated-sources│ └───annotations├───maven-archiver│ pom.properties│└───maven-status└───maven-compiler-plugin└───compile└───default-compilecreatedFiles.lstinputFiles.lst現(xiàn)在如何運(yùn)行? 經(jīng)過(guò)大量的搜索和挖掘,我沒(méi)有想出可以輸入maven命令來(lái)運(yùn)行該項(xiàng)目的解決方案,因此我將以老式的方式進(jìn)行。
基本命令如下:
java --module-path <all-of-your-modules-jar-file> -m <which-module>/<and-which-class-of-it-you-want-to-run>因此,我們知道,我們不應(yīng)該以這種方式手工完成此任務(wù),但是我的朋友對(duì)您的期望卻很低。 如果有人知道更好的方法,請(qǐng)告訴我。 該命令是:
java --module-path gui\target\gui-1.0-SNAPSHOT.jar;logic\target\logic-1.0-SNAPSHOT.jar -m gui/com.mhrimaz.gui.GUIMain顯然,如果運(yùn)行此命令,最終將看到此錯(cuò)誤:
Error occurred during initialization of boot layer java.lang.module.FindException: Module javafx.controls not found, required by gui基本上,它說(shuō),在模塊解析期間,沒(méi)有找到j(luò)avafx.controls模塊。 很簡(jiǎn)單,您應(yīng)該將所有JavaFX模塊添加到模塊路徑。 最終命令如下:
java --module-path gui\target\gui-1.0-SNAPSHOT.jar;logic\target\logic-1.0-SNAPSHOT.jar;"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-base\11-ea+19\javafx-base-11-ea+19-win.jar";"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-graphics\11-ea+19\javafx-graphics-11-ea+19-win.jar";"C:\Users\YOURUSERNAME\.m2\repository\org\openjfx\javafx-controls\11-ea+19\javafx-controls-11-ea+19-win.jar" -m gui/com.mhrimaz.gui.GUIMain這個(gè)命令在我的Windows機(jī)器上可以正常工作。 如果需要代碼,可以在我的GitHub上找到它。
如果您有任何疑問(wèn),請(qǐng)不要猶豫,我會(huì)盡力回答。
最后,Hello World!
翻譯自: https://www.javacodegeeks.com/2018/08/javafx-on-jdk-11.html
jdk11 javafx
總結(jié)
以上是生活随笔為你收集整理的jdk11 javafx_JDK 11上的JavaFX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 上面一个日字下面一个木字念什么啊?啥意思
- 下一篇: 肩膀英语怎么读 肩膀英语解释