JavaFX基础:2:使用javafx-maven
-maven-是一个Maven的插件,用于提供在Maven中管理应用的方式。只需要通过mvn jfx:run即可运行应用。在这篇文章中,我们利用在IDEA的IDEA中生成的代码,结合-maven-介绍如何在mvn中进行应用的构建和运行。
事前准备 代码构成
准备如下4个文件和对应的目录结构
liumiaocn:JavaFXSample liumiao$ tree .
.
├── pom.xml
└── src└── main├── java│ └── com│ └── liumiaocn│ └── javademo│ ├── Controller.java│ └── Main.java└── resources└── fxml└── sample.fxml8 directories, 4 files
liumiaocn:JavaFXSample liumiao$
代码详细
liumiaocn:JavaFXSample liumiao$ cat src/main/java/com/liumiaocn/javademo/Main.java
package com.liumiaocn.javademo;import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;public class Main extends Application {@Overridepublic void start(Stage primaryStage) throws Exception{Parent root = FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"));primaryStage.setTitle("Hello LiuMiao");primaryStage.setScene(new Scene(root, 600, 600));primaryStage.show();}public static void main(String[] args) {launch(args);}
}
liumiaocn:JavaFXSample liumiao$
注意事项:().获取的是相对目录下的内容
liumiaocn:JavaFXSample liumiao$ cat src/main/java/com/liumiaocn/javademo/Controller.java
package com.liumiaocn.javademo;public class Controller {
}
liumiaocn:JavaFXSample liumiao$
liumiaocn:JavaFXSample liumiao$ cat src/main/resources/fxml/sample.fxml
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?><?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="com.liumiaocn.javademo.Controller"xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
liumiaocn:JavaFXSample liumiao$
注意事项:此处的fx:中的的设定需要进行设定,不然运行时无法会提示FXML相关的load的错误,非常容易陷入没有找到fxml文件的误解中,实际是运行时找到了fxml文件但是未曾找到此文件中设定的
liumiaocn:JavaFXSample liumiao$ cat pom.xml
<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.0modelVersion><groupId>com.liumiaocngroupId><artifactId>javademoartifactId><version>0.0.1-SNAPSHOTversion><packaging>jarpackaging><name>javafxdemoname><description>JavaFX demo projectdescription><build><plugins><plugin><groupId>com.zenjavagroupId><artifactId>javafx-maven-pluginartifactId><version>8.8.3version><configuration><mainClass>com.liumiaocn.javademo.MainmainClass>configuration>plugin>plugins>build>project>
liumiaocn:JavaFXSample liumiao$
注意事项:是唯一需要设定的内容,设定入口所在类即可。
注意事项:使用的-maven-的版本为8.8.3,为当前(2019/5/3)的最新版本。
执行确认
执行mvn clean jfx:run即可运行
执行命令:mvn clean jfx:run
执行示例如下所示:
liumiaocn:JavaFXSample liumiao$ mvn clean jfx:run
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.liumiaocn:javademo >-----------------------
[INFO] Building javafxdemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ javademo ---
[INFO]
[INFO] >>> javafx-maven-plugin:8.8.3:run (default-cli) > :jar @ javademo >>>
[INFO]
[INFO] >>> javafx-maven-plugin:8.8.3:jar (jar) > [jfxjar]package @ javademo >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ javademo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ javademo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 2 source files to /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXSample/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ javademo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXSample/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ javademo ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ javademo ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ javademo ---
[INFO] Building jar: /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXSample/target/javademo-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] <<< javafx-maven-plugin:8.8.3:jar (jar) < [jfxjar]package @ javademo <<<
[INFO]
[INFO]
[INFO] --- javafx-maven-plugin:8.8.3:jar (jar) @ javademo ---
[INFO] Building JavaFX JAR for application
[INFO] Adding 'deploy' directory to Mojo classpath: /Users/liumiao/easypack/containers/alpine/maven/demo/JavaFXSample/src/main/deploy
[INFO]
[INFO] <<< javafx-maven-plugin:8.8.3:run (default-cli) < :jar @ javademo <<<
[INFO]
[INFO]
[INFO] --- javafx-maven-plugin:8.8.3:run (default-cli) @ javademo ---
[INFO] Running JavaFX Application