У меня есть проект JavaFx, работающий на Java 10, который отлично работает в IntelliJ, что для меня означает, что я неправильно упаковываю многомодульный проект. Я попытался найти исправления, но не нашел ни одного.
Проблема
Я "успешно" создаю .jar, поскольку я не получаю ошибок от пакета maven, но когда я щелкаю правой кнопкой мыши по нему и запускаю, моя программа падает, потому что она не находит службы и, следовательно, не может продолжить с нормальной работой.
Пример
Приведенный ниже код выведет IMPLEMENTATIONS
при запуске через IntelliJ, но NO IMPLEMENTATIONS
при запуске через мой .jar
ServiceLoader<Db> loader = ServiceLoader.load(Db.class);
if(!loader.iterator().hasNext()){
log.error("NO IMPLEMENTATIONS");
}else {
for(Db db : loader){
log.error("IMPLEMENTATIONS");
}
}
top pom.xml раздел сборки
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>10</source>
<target>10</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>--add-opens=java.base/java.lang=gson</arg>
<arg>--add-exports=javafx.graphics/com.sun.javafx.application=ALL-UNNAMED,program</arg>
<arg>--add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED</arg>
<arg>--add-exports=javafx.controls/com.sun.javafx.scene.control.skin.resources=ALL-UNNAMED</arg>
<arg>--add-exports=javafx.base/com.sun.javafx.event=controlsfx</arg>
</compilerArgs>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.1.1</version> <!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<argLine>-Dlog4j.debug</argLine>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
Раздел базы данных модуля pom.xml
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>10</source>
<target>10</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.1.1</version> <!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
Основной раздел проекта pom.xml
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<mainClass>startup.App</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<mainClass>startup.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>program</finalName>
<appendAssemblyId>false</appendAssemblyId>
<attach>false</attach>
</configuration>
</plugin>
</plugins>
</build>
Я действительно не уверен, что делаю неправильно. Кто-нибудь может указать мне правильное направление?