не recoginzed Ресурс только в папке out и gradle run

77
8

У меня возникла проблема с запуском моего простого приложения javafx с помощью gradle.

У меня есть пустой стандартный файл sample.fxml:

<GridPane fx:controller="de.hhn.se.pmt.flowertours.controllers.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>

А в моей папке src Intellij и gradle не жалуются. gradle build выполняется успешно, но выполнение градиента всегда заканчивается на строке xmlns:fx="http://javafx.com/fxml".

Мой build.gradle выглядит так:

plugins {
id 'java'
id 'checkstyle'
id 'jacoco'
id 'com.github.spotbugs' version '1.6.5'
}

apply plugin: 'application'
group 'de.hhn.se.pmt'
version '1.0-SNAPSHOT'

mainClassName = 'de.hhn.se.pmt.flowertours.Main'

allprojects{
compileJava {
options.encoding = 'UTF-8'
sourceCompatibility '1.8'
targetCompatibility '1.8'
}

repositories {
google()
jcenter()
mavenLocal()
mavenCentral()

}
}

repositories {
flatDir{
dirs "libs"
}
}

dependencies {
compile project (':gen')

compile name: 'orm'
compile name: 'jfxrt'

compile group: 'com.jfoenix', name: 'jfoenix', version: '1.2.0'
//logging with slf4j
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.24'
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
//use JUnit 5
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
testCompile 'org.assertj:assertj-core:3.11.1'

}

Добавленная библиотека omr и подпроект gen еще не используются и не должны выполняться (поэтому они не должны быть проблемой). Библиотека jfxrt была попыткой исправить ее и не обязательно.

Моя Main.java выглядит так:

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 {

@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}

/**
* "main" method that starts the program.
*
* @param args start parameter
*/
public static void main(String[] args) {
launch(args);
}
}

Похоже, что во время выполнения библиотеки javafx отсутствуют, но в том числе jfxrt с runtime name: 'jfxrt' не решает проблему.

Что я сделал не так? Это проблема, которую я должен исправить в Intellij?

спросил(а) 2021-01-25T17:25:34+03:00 4 месяца, 4 недели назад
1
Решение
98

Просто чтобы прояснить ситуацию, я не нашел по-настоящему хорошего ответа - javafx и gradle просто не дружат, а реализованная версия intellij не облегчает эту задачу.

Созданный Jar файл из application Gradle Plugion не содержит необходимых файлов javafx - вам нужно включить новые зависимости из openjfx, чтобы фактически создать работающий javfx файл jar.

Это настройка для зависимостей, которая на самом деле не нужна:

def currentOS = org.gradle.internal.os.OperatingSystem.current()
def platform
if (currentOS.isWindows()) {
platform = 'win'
} else if (currentOS.isLinux()) {
platform = 'linux'
} else if (currentOS.isMacOsX()) {
platform = 'mac'
}

Это было добавлено в мои зависимости:

compile "org.openjfx:javafx-base:11:${platform}"
compile "org.openjfx:javafx-graphics:11:${platform}"
compile "org.openjfx:javafx-controls:11:${platform}"
compile "org.openjfx:javafx-fxml:11:${platform}"

Эти дополнительные настройки включают в себя каждый файл src в вашем jar файле, но эта работа еще не завершена и, возможно, не соответствует вашим потребностям.

jar {
manifest {
attributes("Implementation-Title": project.name,
"Implementation-Version": version,
"Main-Class": 'com.your.full.path.to.Main'
)
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
from('src/main/resources/'){
include('database.properties')
into('')
}
}

sourceSets {
main {
resources {
srcDirs "src/main/resources", "src/main/configs"
}
}
}

ответил(а) 2021-01-25T17:25:34+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема