我正在尝试在Mac OS上运行示例JavaFX应用程序。
build.gradle
apply plugin: 'java'
apply plugin: 'application'
repositories {
mavenCentral()
}
dependencies {
compile "org.openjfx:javafx-base:11"
compile "org.openjfx:javafx-graphics:11"
compile "org.openjfx:javafx-controls:11"
}
compileJava {
doFirst {
println "CLASSPATH IS $classpath.asPath"
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.graphics'
]
classpath = files()
}
}
Java类
package com.test;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(l, 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
我使用Gradle 4.10.2
执行任务“gradle compileJava”,我收到此错误:
> Task :compileJava FAILED
CLASSPATH IS /Users/dragos.pruteanu/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-controls/11/58d961774262ec972bf304e16c154a8e18c2050b/javafx-controls-11.jar:/Users/dragos.pruteanu/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/11/a736dd079047ec0b72b8c4970842a5c5e0c19f2f/javafx-graphics-11.jar:/Users/dragos.pruteanu/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/11/9fcd3e8e3227ec97bf503f7991fad1f3b14d005/javafx-base-11.jar
error: module not found: javafx.graphics
1 error
怎么了?由于某些原因,JavaFX库未正确加载。是MacOS还是OpenJFX的错误?
最佳答案
它对您失败的原因主要是从您使用过的jar中派生的自动模块名称不是 javafx.graphics
。尝试使用命令行获取详细信息,我可以观察到以下内容:
并且由于解析的模块名称与您在命令行--add-modules javafx.graphics
中指定的名称不同,因此您遇到了所述错误。
此外,from Run HelloWorld using JavaFX 11注释之一显示为:
从注释中编辑:-使用JavaFX在Run HelloWorld using Gradle上定义的步骤将是寻找使用gradle构建适当步骤的更好位置。
如其陈述(编辑我的),需要例如在依赖项中指定平台。
compile "org.openjfx:javafx-graphics:11:$platform"
并且您可能还需要示例中使用的构建脚本来将平台/操作系统指定为分类器。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.gradle:osdetector-gradle-plugin:1.6.0'
}
}
apply plugin: 'application'
apply plugin: 'com.google.osdetector'
ext.platform = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os