java - Gradle 不包括 FXML 和图像

标签 java gradle intellij-idea build continuous-integration

我一直在寻找将 FXML 和图像包含在 build.gradle 中的正确方法,以便将它们构建到 jar 中。我看here并试过了,但还是不行。

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

这是 build.gradle ( Github ):

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"
    }
}

这是 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);

堆栈跟踪显示 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

你可以看到 layoutForm.fxmlIcon.png 都在树中

这是输出树:

com
└───voidustries
    └───poly
        │   CustomFormatter.class
        │   Main.class
        │   PolyThreads.class
        │   SysTray.class
        │
        └───gui
                Controller.class
                GUI.class

在 out 树中,它们都不存在,我已经摆弄了几个小时试图解决这个问题。任何帮助将不胜感激。

此外,如果您需要更多 here是Github仓库

最佳答案

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

在 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文件和Main.class文件中的sample包都找不到。

关于java - Gradle 不包括 FXML 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941633/

相关文章:

java - ubuntu 找不到系统 Java 编译器。确保您已经安装了 JDK(不仅仅是 JRE)a

java - JanusGraph 与 Solr

android - 如何为不同的 productFlavors 使用不同的资源集

android - 在 IntelliJ IDEA 中加快 Android 项目构建时间

java - Spring Boot 异常 "java.lang.IllegalArgumentException: Not a managed type:"

intellij-idea - IntelliJ IDEA : Navigate to the next or previous identifier occurrence using the Alt+MouseWheel

java - Netbeans 向导,方法 storeSettings 运行两次

java - Android Studio : Error:org. gradle.tooling.BuildException: 无法生成 v1 签名

android - 在android studio中导入项目时使用现有的gradle包装器

java - 如何用 Derby 取消声明?