我目前只使用javafx.util包中的一个类:Pair
,因为我不想实现自己的Pair类,所以我认为这是一个可以推理的解决方案。
但是,我正在使用Intellij,它似乎知道在哪里可以找到jfxrt.jar,所以我没有注意到这可能会导致问题。
事实上,当我从Intellij运行我的main时,一切都是正确的,但是当我尝试使用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>
但它似乎没有改变任何东西,即使它听起来很傻,我试图在我的jar中的lib文件夹中复制/粘贴jfxrt.jar,而且令人惊讶的是,它也无法正常工作......
我使用像这样的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>
如果您有任何建议,请继续(可能是我的配对问题的另一个解决方案,不依赖于javafx ...)
答案 0 :(得分:0)
您是如何打包申请的?您可以尝试使用maven-assembly-plugin进行打包,有一个名为jar-with-dependencies的描述符,它将它们添加到最终的工件中,然后调用mvn package。
答案 1 :(得分:-1)
jfxrt.jar不在lib文件夹中...
它在lib / ext /
中例如jdk1.8.0_211 / jre / lib / ext / jfxrt.jar