Gradle 不包括 FXML 和图像

Sto*_*rch 4 java continuous-integration build intellij-idea gradle

我一直在寻找将 FXML 和图像包含在build.gradlejar 中的正确方法,以便将它们构建到 jar 中。我已经看过here并尝试过,但它仍然不起作用。

抛出这个错误: java.lang.NullPointerException: inputStream is null.

这是build.gradleGithub):

group 'com.voidustries'
version '1.0-SNAPSHOT'

sourceSets {
    main {
        resources {
            srcDirs = ["src/main/java/com/voidustries/poly"]
            includes = ["gui/layoutForm.fxml"]
        }
    }
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.junit.platform:junit-platform-gradle-plugin:1.1.0'
    }
}

apply plugin: 'java'
apply plugin: 'org.junit.platform.gradle.plugin'

repositories {
    mavenCentral()
}

dependencies {
    testCompile('org.junit.jupiter:junit-jupiter-api:5.1.0')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.1.0')
}

task wrapper(type: Wrapper) {
    description = 'Generates gradlew[.bat] scripts'
    gradleVersion = '4.3.1'
}

test {
    testLogging {
        events "passed", "skipped", "failed"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 GUI.java ( Github ):

FXMLLoader loader = new FXMLLoader();
FileInputStream fis = new FileInputStream(settings);
ResourceBundle resourceBundle = new PropertyResourceBundle(fis);
loader.setResources(resourceBundle);

Parent root = loader.load(getClass().getResourceAsStream("layoutForm.fxml"));
Platform.setImplicitExit(false);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪说这loader.load(getClass().getResourceAsStream("layoutForm.fxml"));是导致错误

这是源树:

com
????voidustries
    ????poly
        ?   CustomFormatter.java
        ?   Main.java
        ?   PolyThreads.java
        ?   SysTray.java
        ?
        ????gui
        ?       Controller.java
        ?       GUI.java
        ?       Icon.png
        ?       layoutForm.fxml
        ?
        ????img
                Icon.png
Run Code Online (Sandbox Code Playgroud)

你可以看到,layoutForm.fxml并且Icon.png都出现在树

这是输出树:

com
????voidustries
    ????poly
        ?   CustomFormatter.class
        ?   Main.class
        ?   PolyThreads.class
        ?   SysTray.class
        ?
        ????gui
                Controller.class
                GUI.class
Run Code Online (Sandbox Code Playgroud)

在外面的树中,他们都缺席了,我已经折腾了几个小时试图解决这个问题。任何帮助将不胜感激。

此外,如果您需要更多这里是 Github 存储库

mik*_*ent 6

只是为任何不满意的人添加我的三分钱:

在 src/main/resources (Windows src\main\resources) 下,您似乎必须使资源文件的“位置”用于运行 .class 文件的类路径相匹配

我已经通过在 JavaFX gradle 项目中使用 .fxml 文件得出结论(直到更有知识的人另有说明)。

Main(包含main())位于名为“sample”的包中...因此 .java 文件的路径为 ...\EclipseWorkspace\TestFXexp\src\main\java\sample\Main.java。

这似乎意味着您的 .fxml 文件必须放在此处:...\EclipseWorkspace\TestFXexp\src\main\resources\ sample \config.fxml。

gradle installdist然后将正确打包 .jar 以进行部署。展开 .jar,您会发现 config.xml 已与 .class 文件一起放在目录 sample\ 下...并且 Main.class 文件能够找到它并使用它。

当我像这样放置 config.fxml 时:...\EclipseWorkspace\TestFXexp\src\main\resources\config.fxml ...它不起作用:config.fxml 被放在.jar的包sample文件和 Main.class 文件找不到它。