Для начала, первая проблема связана с вашим ресурсом:
Родительский корень = FXMLLoader.load (getClass (). GetResource ("fxml / ui.fxml"));
Если вы используете getResource
, вы должны использовать абсолютный путь:
Parent root = FXMLLoader.load(getClass().getResource("/fxml/ui.fxml"));
В StackOverflow есть много вопросов по этому вопросу, этот ответ очень правильныйссылка.
maven-shade-plugin
Предполагая, что ваш com.potatospy.NewMain
класс является классом запуска , который не расширяется Application
,и ваши источники (под src/main/java/
):
- com / potatospy / NewMain.java
- com / potatospy / Main.java
- com / potatospy /UIController.java
и ваши ресурсы (под src/main/resources
):
Если вы хотитесделайте банку тени / жира, и вы не модифицируете плагин maven-resources по умолчанию, это будет работать только при использовании плагинов maven-compile-plugin
и maven-shade-plugin
из вашего pom:
mvn clean package
тогда вы можете запустить свое приложение:
java -jar target/AppName-1.0-SNAPSHOT.jar
Обратите внимание, что плагин ресурсов по умолчанию применяется, и ваши файлы добавляются в target/classes
:
- target / classes / com / potatospy / NewMain.class
- target / classes/com/potatospy/Main.class
- target / classes / com / potatospy / UIController.class
- target / classes / fxml / ui.fxml
maven-resource-plugin
Но если вы добавите плагин ресурсов, как вы сделали в pom, при запуске вы заметите, что ваши файлы добавляютсяto:
- target / classes / com / potatospy / NewMain.class
- target / classes / com / potatospy / Main.class
- target / classes / com/potatospy/UIController.class
- target / fxml / ui.fxml
, и когда пакет готов, файл fxml даже не добавляется в банку!
Если вам нужно для включения плагина ресурсов, вам понадобится что-то вроде этого:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.fxml</include>
</includes>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
</execution>
</executions>
</plugin>
Обратите внимание, что я добавил classes
в выходной каталог (поэтомуРесурсывключены в это).