在运行时找不到jfxrt.jar(javafx)

时间:2014-03-15 17:33:08

标签: java maven javafx

我目前只使用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>
    

但它似乎没有改变任何东西,即使它听起来很傻,我试图在我的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 ...)

2 个答案:

答案 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