В настоящее время я использую только один класс из пакета javafx.util: Pair
, потому что я не хотел реализовывать свой собственный класс Pair, поэтому я думал, что это будет разумное решение. Тем не менее, я работаю с Intellij, который, похоже, знает, где найти jfxrt.jar, поэтому я не заметил, что это может вызвать проблемы.
На самом деле, когда я запускаю свой основной из Intellij, все правильно, но когда я пытаюсь упаковать приложение с Maven, а затем java -jar myapp.jar
, приложение нуждается в классе Pair и, по-видимому, не находит его:
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/util/Pair
Поэтому я искал вокруг, и вот что я могу вам сказать:
1.7.0_40
, поэтому я знаю, что jfxrt.jar в комплекте, и я нашел его.3.1.0
Я попытался добавить эту системную зависимость в свой pom.xml:
<dependencies>
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/jfxrt.jar</systemPath>
</dependency>
</dependencies>
Но, похоже, это ничего не меняет, и даже если это звучит глупо, я попытался скопировать/вставить jfxrt.jar в папку lib в моей банке, и, как ни удивительно, это тоже не сработало...
Я использую maven-assembly-plugin следующим образом:
<groupId>minmax</groupId>
<artifactId>minmax</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/jfxrt.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fr.tlasnier.jeux.puissance4.ihm.Puissance4Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Если у вас есть какие-либо предложения, пожалуйста, продолжайте (может быть, другое решение для моей проблемы с Pair, которая не полагается на javafx...)
jfxrt.jar не находится в папке lib...
Это в lib/ext/
например, jdk1.8.0_211/jre/lib/ext/jfxrt.jar
Как вы упаковываете свое приложение? Вы можете попробовать с помощью maven-assembly-plugin для упаковки, есть дескриптор, называемый jar-with-dependencies, который добавляет их в последний артефакт, затем вы вызываете пакет mvn.