【編者按】本文作者為 Carl Dea,主要介紹利用 Jigsaw 項目在大約一分鐘內(nèi)編寫標(biāo)準(zhǔn)化的“Hello World”消息代碼。本文系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn)。
你可能已經(jīng)聽說了 Jave 9 的新模塊系統(tǒng),也就是 Jigsaw 項目。如果你還不了解 Java 9 的新模塊系統(tǒng),請閱讀 Mark Reinhold 的模塊系統(tǒng)狀態(tài)報告。另外還可以看看 @nipafx Nicolai Parlog 的優(yōu)秀博客。Nicolai 在博客中詳細(xì)介紹了 Java 9 的新模塊系統(tǒng)和眾多場景。
在本文中,筆者會講解如何利用 Java 9 的模塊系統(tǒng)在 60 秒內(nèi)創(chuàng)建一個 JavaFX HelloWorld 應(yīng)用程序。
環(huán)境要求
截至本文發(fā)稿時,Java 9 仍然處于搶鮮體驗(yàn)階段,請登錄 https://jdk9.java.net/download/ 獲取最新的構(gòu)建版本。
- JDK 9 EA 構(gòu)建版本 114 或更高版本 (JDK 9 EA)
操作步驟
假設(shè)你已經(jīng)安裝了 JDK,也設(shè)置了相應(yīng)的環(huán)境變量。此外,你還可以在命令行或終端并輸入:java -version 來確定所安裝的 JDK 版本。例如

第 1 步:按照以下方式,在項目主目錄下根據(jù)自己的操作系統(tǒng)( Windows、Linux 或 Mac)創(chuàng)建一個目錄。此外,在 helloworld 項目目錄下創(chuàng)建一個 src 目錄。
# Windows c:\Users\myusername>md helloworld
c:\Users\myusername>md helloworld/src
# Linux
/user/home/myusername $ mkdir -p helloworld/src
# Mac
/Users/myusername$ mkdir -p helloworld/src cd helloworld
第 2 步:根據(jù) Java 9 組織源碼和模塊的新方法,使用簡單的命名慣例創(chuàng)建一個目錄。
創(chuàng)建一個目錄并按照模塊命名,例如:com.mycompany.helloworld。假設(shè)你當(dāng)前的目錄是
mkdir src/com.mycompany.helloworld
第 3 步: 基于 HelloWorld.java 文件的包命名空間創(chuàng)建若干目錄。在本例中,我們會使用以下目錄結(jié)構(gòu)來創(chuàng)建主 HelloWorld.java 文件。
mkdir -p src/com.mycompany.helloworld/com/mycompany/helloworld
目錄應(yīng)該如下所示:
<User Home dir>/
helloworld/
src/
com.mycompany.helloworld/
com/
mycompany/
helloworld/
第 4 步:創(chuàng)建一個 module-info.java 文件。這樣,編譯器就會知道應(yīng)用程序需要編譯哪些核心模塊依賴關(guān)系,并且運(yùn)行 javafx 等模塊。在 helloworld/src/com.mycompany.helloworld 目錄下創(chuàng)建一個文件并命名為 module-info.java。復(fù)制以下代碼并粘貼到 module-info.java 文件中。使用 vi、nano 或 notepad 編輯器。
module com.mycompany.helloworld { requires javafx.base; requires javafx.graphics; requires javafx.controls; exports com.mycompany.helloworld; }
第 5 步:創(chuàng)建 HelloWorld.java 應(yīng)用程序文件。在 helloworld/src/com.mycompany.helloworld/com/mycompany/helloworld/ 目錄中創(chuàng)建這一文件。復(fù)制以下代碼并粘貼到 HelloWorld.java 應(yīng)用程序文件中。
package com.mycompany.helloworld; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; /** * A JavaFX Hello World */ public class HelloWorld extends Application { /** * @param args the command line arguments */ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { stage.setTitle("Hello World"); Group root = new Group(); Scene scene = new Scene(root, 300, 250); Button btn = new Button(); btn.setLayoutX(100); btn.setLayoutY(80); btn.setText("Hello World"); btn.setOnAction( actionEvent -> System.out.println("Hello World")); root.getChildren().add(btn); stage.setScene(scene); stage.show(); } }
第 6 步:使用 -d 選項加已編譯模塊的位置來編譯該源碼。新 helloworld 模塊的目錄是 mods/com.mycompany.helloworld。
javac -d mods/com.mycompany.helloworld src/com.mycompany.helloworld/module-info.java src/com.mycompany.helloworld/com/mycompany/helloworld/HelloWorld.java
第 7 步:按照模塊來執(zhí)行 Hello World 應(yīng)用程序。把模塊編譯到 mods 目錄里之后,就可以使用 Java 9 的新 -modulepath 選項來指定已編譯的模塊目錄了。此外,還要指定 -m 選項來執(zhí)行模塊及其主類 HelloWorld。使用以下命令:
java -modulepath mods -m com.mycompany.helloworld/com.mycompany.helloworld.HelloWorld
上一個命令的輸出結(jié)果是:

結(jié)論
不知道你的用時會不會超過 60 秒,但如果你的環(huán)境已經(jīng)設(shè)置完畢,JDK 9 也已經(jīng)安裝好了,應(yīng)該可以在幾秒內(nèi)剪切并粘貼代碼。筆者發(fā)現(xiàn),新版 Java 9 模塊系統(tǒng)相當(dāng)簡單直接。盡管還要額外輸入一些內(nèi)容讓編譯器知道模塊的位置,但這和 -classpath 選項確實(shí)沒有多大區(qū)別。
筆者發(fā)現(xiàn),大型項目把各個組份拆分為模塊,并從中受益。這樣一來,許多工具可以創(chuàng)建多個細(xì)小的可執(zhí)行程序,從而縮短加載時間,這的確是令 Java 社區(qū)激動的時刻。雖然前路還很漫長,但這正是我們亟需的功能,它的到來一定會推動我們編寫、管理和部署模塊化軟件。
OneAPM 能為您提供端到端的 Java 應(yīng)用性能解決方案,我們支持所有常見的 Java 框架及應(yīng)用服務(wù)器,助您快速發(fā)現(xiàn)系統(tǒng)瓶頸,定位異常根本原因。分鐘級部署,即刻體驗(yàn),Java 監(jiān)控從來沒有如此簡單。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
原文地址:https://dzone.com/articles/a-javafx-helloworld-using-java-9s-project-jigsaw-i