【发布时间】:2014-03-15 17:33:07
【问题描述】:
我目前只使用 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
所以我四处寻找,我可以告诉你:
- 我的 JDK 是
1.7.0_40,所以我知道 jfxrt.jar 是捆绑的,我找到了。 - Maven 版本:
3.1.0 - 我在 Windows 7 上
- 我尝试将 %JAVA_HOME%\lib\ 添加到我的 PATH 变量中,但没有更改任何内容
-
我尝试在我的 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 复制/粘贴到我的 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 ...)
【问题讨论】:
-
写这门课比写这个问题和做所有的研究要快。为什么你不想把these few lines 放在你的代码中?
-
因为我想以一种“更干净”的方式复制/粘贴代码。毕竟,如果我们不能使用依赖项,为什么还有 maven 呢?但无论如何,谢谢,我会这样做,直到我有另一个解决方案
-
如果这是您从库中使用的唯一方法,我什至不会认为这是一种更清洁的方法。沿着这些思路的某个地方:en.wikipedia.org/wiki/Package_principles