Gradle Jar работает как положено, но Gradle Run не работает - PullRequest
0 голосов
/ 02 ноября 2018

Недавно я хотел собрать фляги моего проекта JavaFX с Gradle. Поэтому я продолжил работу и создал обертку в каталоге моего проекта и отредактировал мой файл build.gradle следующим образом.

apply plugin: 'java'
apply plugin: 'application'

sourceSets.main.java.srcDirs = ['/']
mainClassName = "Main"

task wrapper(type: Wrapper) {
    gradleVersion = '4.8'
}

jar {
    manifest {
        attributes(
                'Class-Path': '../',
                'Main-Class': 'Main'
        )
    }

    from('/') {
        include 'images/**/*.png'
        include 'images/**/*.jpg'
        include 'styles/css/**/*.css'
        include 'fonts/**/*.TTF'
        include 'fonts/**/*.ttf'
    }
}

Используя это, мой скомпилированный jar работает как задумано. Нет ошибок Но всякий раз, когда я запускаю gradlew run, я получаю следующую ошибку.

Caused by: java.lang.NullPointerException
        at styles.java.TitleStyles.<init>(TitleStyles.java:9)
        at scenes.TitleScene.<init>(TitleScene.java:34)
        at scenes.SceneController.<clinit>(SceneController.java:6)
        ... 14 more

Код, о котором идет речь,

private String stylesheet = this.getClass().getResource("/styles/css/TitleStyles.css").toExternalForm();

и структура моего проекта выглядит следующим образом

Изображение структуры проекта

enter image description here

Структура проекта Picture # 2

enter image description here

Есть идеи, почему я не могу сделать gradlew run?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Это действительно была проблема с classpath, но мне нужно было сделать еще несколько вещей, чтобы решить мои проблемы. Мне пришлось воссоздать свой проект gradle со следующей структурой.

src
  -main
  --java
  ---projectCodeHere

  --resources
  ---nonJavaFileCodeHere

Мне пришлось переместить не-Java код в ресурсы, иначе он не был скопирован вместе с файлами .class. И тогда мне пришлось изменить свой код, чтобы он выглядел примерно так:

private String stylesheet = getClass().getClassLoader().getResource("css/ConnectionStyles.css").toExternalForm();

После этого все работало правильно. Похоже, что Gradle и IntelliJ придирчивы к структуре проекта, и я не смог найти «чистого» решения для изменения путей к классам, поэтому я в итоге просто реорганизовал свой проект, и я всегда счастлив от этого. Спасибо за помощь!

0 голосов
/ 02 ноября 2018

Причина возникновения исключения NullpointerException при использовании Gradle Run заключается в том, что структура папки "/ styles / ...." отсутствует в пути к классам

Чтобы проверить это, вы можете добавить эту строку в свой Main.java:

System.out.println (System.getProperty ("java.class.path"));

и запустите его как java -jar и Gradle Run и вы увидите разницу. Чтобы решить эту проблему, используйте стандартную структуру Java-папки Gradle:

src 
   - main
   --- java
   --- resources
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...