JavaFX 打包:NoClassDefFoundError

2023-12-13

我使用 maven 和 OpenJDK 1.8 打包 JavaFX 应用程序 我的 pom.xml 中的相关部分:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>ui.Main</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

现在重要的是这曾经有用。我知道这一点是因为我专门在包装最终起作用的地方进行了 git 提交。 经过一天左右的多次构建(我不知道发生了什么变化),由于以下错误,我无法再启动 jar:

$ java -jar target/app.jar
Error: Could not find or load main class ui.Main Caused by:
java.lang.NoClassDefFoundError: javafx/application/Application

当我查看 Jar 的内容时,我可以看到除了 JavaFX 类之外,所有依赖项都被明确包含在内。

我尝试过的:

  • 构建罐子javapackager
  • 修改 javafx-maven-plugin
  • 在我的 pom.xml 中显式添加 JavaFX 作为依赖项,希望程序集插件能够为我打包它

以上均未成功。我能够启动应用程序的唯一方法是直接从 IDE 中启动,这似乎意味着 JavaFX 库are在我的系统上仍然可用。

关于如何让它(再次)运行有什么想法吗?


简短回答

我使用 openJDK 11 运行我的 jar,其中不包含 JavaFX,同时使用 openJDK 8 构建它。案例已结。

调查结果、细节和原因

由于我的 IDE 能够毫无问题地运行我的代码,因此我认为该问题特定于我的配置/机器。事实证明 Canonical/Ubuntu 决定了

[对于]仿生[...]移动默认的 JRE/JDK在 main 中到 OpenJDK 11 中 2018 年 9 月/10 月作为 SRU。询问Ubuntu

并且,正如另一个 SO 线程所指出的:

JavaFX 11 不是 JDK 的一部分anymore 堆栈溢出

(这还包括如何使用 JDK 11 修复此问题的说明)

最后,按照墨菲定律,我在 10 月 4 日设置了项目打包,并决定在 10 月 8 日通过 apt 安装 eclipse,其中包括openjdk-11-jdk:amd64(这是登录有用的/var/log/apt/history.log).

This also更新了我的/etc/alternatives/java指向 v11。由于我在没有明确指定 java 二进制文件的情况下运行了 jar,因此它崩溃了。

Running

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar target/app.jar

快速测试按预期工作。现在我只需要将项目升级到 openJDK 11,否则始终使用特定的 JDK 8 运行我的应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX 打包:NoClassDefFoundError 的相关文章

随机推荐

  • React-native,动态渲染按钮点击

    我想动态生成一个按钮单击TouchableOpacity在反应本机中 我没有找到任何相关内容 我想要的只是从函数中调用 TouchableOpacity onPress 或查看其对按钮的效果 在钛合金中 我们正在做 button click
  • 无法在 docker 上执行 nvidia 运行时

    我正在尝试让 nvidia docker 在我的 centos7 系统上运行 cat etc systemd system docker service d override conf Service ExecStart ExecStart
  • 将通知链接到闪亮仪表板中的选项卡

    我想将通知链接到 内部 选项卡 为此 我遇到了这个 如何在闪亮的notificationItem中使用href 这似乎在加载应用程序后立即起作用 但在侧边栏中进行一些导航后 链接不再起作用 ui R library shiny librar
  • 如何在java中安全地存储加密密钥? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一个 java 属性对象 其中包含 Web 服务的身份验证信息 我需要加密该数据 但我不知道需要在哪里存储加密密钥才能保证其安全 加密这些数据并以安全的方式检索它的最佳实践是
  • 从 AngularJS 指令访问属性

    我的 AngularJS 模板包含一些自定义 HTML 语法 例如
  • 如何在 Django REST 框架的可浏览 API 中编辑图标?

    我需要编辑可浏览 API 的图标 是否可以通过覆盖模板中的 api html 来做到这一点 这可以通过在 api html 中添加以下块来实现 block style block super endblock
  • Swift 3 尝试呈现谁的视图不在窗口层次结构中

    这个问题已被问过很多次 但即使在尝试了大多数可能的事情之后 我仍然无法找到适合我的解决方案 这是错误消息 警告 尝试在 上显示其视图不在窗口层次结构中的内容 注意 我没有使用任何导航控制器 我只是以模态方式呈现一个视图控制器我上面有一个用于
  • C 和 C++ 中的标准头文件列表

    在哪里可以找到 C 和 C 中所有头文件的列表 当我构建库时 我收到类似 tree h not found 我想这是 C 和 C 中的标准头文件 这引起了我想了解所有头文件及其贡献的好奇心 有地方可以找吗 我正在 Solaris Unix
  • 完成后将变量保存在 .awk 文件中以供下次运行

    因此 我有一个 awk 文件 它将一个订单文件拆分为多个订单文件 文件名从orders xml 包含100个订单的主文件 到递增的文件 如order 1 xml order 2 xml order 3 xml等 当 awk文件完成文件分割后
  • 用于添加到收藏夹的精灵或类似效果

    我有一个 iPhone 应用程序 其中包含 全部 和 收藏夹 选项卡 其中包含标准主细节布局 在 全部 选项卡上 用户可以选择 添加到收藏夹 我正在寻找一个好的视觉队列来向用户表明这样做后可以从 收藏夹 选项卡访问该项目 是否存在类似 精灵
  • Asp.net WebApi 中的自定义授权 - 一团糟?

    我正在阅读有关 Web Api 授权的多个资源 书籍和一些答案 假设我想添加仅允许某些用户访问的自定义属性 Case 1 我见过这种方法压倒性的 OnAuthorization 如果出现问题 它会设置响应 public class Allo
  • PyQt5:使用QThread弹出进度条

    我怎样才能实现进度条 in a 弹出窗口它通过所谓的 Worker 类 即消耗时间 CPU 的任务 监视正在运行的函数的进度QThread 我已经检查了无数的示例和教程 但进度条显示在弹出窗口中的事实似乎让一切变得更加困难 我相信我想要的是
  • FineUploader onProgress() 回调不适用于 Android

    Fine Uploader 的 onProgress 回调在 Android 设备上不起作用 这是我的代码 onProgress function id fileName loaded total alert debug this aler
  • 在Python中使用Win32api获取鼠标滚轮滚动

    我想读取鼠标滚轮滚动事件然后模拟它们 我知道我可以使用下面的代码来模拟它 Scroll one up win32api mouse event MOUSEEVENTF WHEEL x y 1 0 Scroll one down win32a
  • Angular 4 - 动态更新 Facebook 的元标签(开放图)

    我们如何动态添加 更新元标记 以便 Facebook Whatsapp 共享对话框选择它们 我将 Angular 2 应用程序升级到 Angular 4 以便在我们从 API 获取组件中的数据后 使用元服务动态添加 更新元标记 到目前为止
  • CSS:在不改变容器大小的情况下将某些文本加粗

    我有一个水平导航菜单 它基本上只是一个 ul 元素并排设置 我不定义宽度 而只是使用填充 因为我希望宽度由菜单项的宽度定义 我将当前选定的项目加粗 问题在于 在加粗时 单词会变得稍微变宽 这会导致其余元素稍微向左或向右移动 有什么聪明的方法
  • 是否可以在 RAM 中执行一些计算?

    理论上 有没有办法使用内存相关指令 例如move clflush或其他任何东西 例如xor例如 在两个相邻行之间 由于我对 RAM 和汇编的了解有限 我无法想到任何这样的可能性 不 任何计算都是在 CPU 或 GPU 或其他可以加载 存储到
  • SAS PRX 请提取子字符串

    我正在尝试使用 SAS PRX 函数从我的数据集中提取子字符串 但它只返回精确的匹配项 而我需要它更加灵活并提取匹配各种条件的匹配项 我已将我的数据复制到下面 如您所见 我的数据中的变量之一是 brandmodel 其中包含特定相机的品牌名
  • 如何使用annotation_custom()将GROB放置在绘图区域的精确区域?

    我正在尝试使用以下命令重现以下 base R 图ggplot2 我已经完成了大部分工作 但目前令我困惑的是连接图右侧边缘地毯图的线段的位置以及相应的标签 标签已通过以下方式绘制 在下面的第二张图中 anotation custom 我已经使
  • JavaFX 打包:NoClassDefFoundError

    我使用 maven 和 OpenJDK 1 8 打包 JavaFX 应用程序 我的 pom xml 中的相关部分