【问题标题】:Cannot find jfxrt.jar (javafx) at runtime在运行时找不到 jfxrt.jar (javafx)
【发布时间】: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

标签: java maven javafx


【解决方案1】:

您如何打包您的应用程序?您可以尝试使用 maven-assembly-plugin 进行打包,有一个名为 jar-with-dependencies 的描述符将它们添加到最终工件中,然后您调用 mvn package。

【讨论】:

    【解决方案2】:

    jfxrt.jar 不在 lib 文件夹中...

    它在 lib/ext/ 中

    例如,jdk1.8.0_211/jre/lib/ext/jfxrt.jar

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2014-07-07
      • 2021-02-11
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多