gpt4 book ai didi

java - 如何在具有非模块化依赖项的 Java 11 中打包应用程序

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:27 29 4
gpt4 key购买 nike

我开发并发布了一个使用 Apache Batik 和 JavaCV 的 Java Swing 应用程序。我已经通过 Java 1.6、7 和 8 对其进行了更新。macOS、Windows 和 Linux 的安装程序是使用 Javapackager 构建的。 Java 8 将于 2019 年 1 月终止支持,我找不到在新的 LTS 版本 Java 11 上打包和分发的解决方案。

JavaCV 或 Batik 都不能生成模块化 jar,但我已经设法将它们重新打包到可以在 Java 11 上编译和生成可运行 jar 的程度,应用程序运行良好,但我无法打包它进行分发。我计划下降到 Java 10 以使用 javapackager 并从那里捆绑 11 运行时,但它使用 jlink 生成自定义运行时,jlink 失败,因为 JavaCV 和 Batik 不是模块化的。由于 Batik 和 JavaCV 中不满足的引用,jdeps 不会生成 module-info.class 来修补并使它们模块化,即使我的应用程序在没有它们的情况下也能正常工作。

因此,我将不得不保留 Java 8 的代码库,即使不再受支持也要发布它。

我知道有人呼吁创建 javapackager 的替代品,但直到 Java 8 被弃用后才会出现。而且我仍然需要 Batik 和 JavaCV 项目来重构和构建模块化 jar 以生成自定义运行时。

有人可以提供任何其他解决方案吗?我错过了什么吗?谢谢。

最佳答案

更新:自 JDK 14 以来,现在包含了 jpackage。不过,以下答案仍然适用于旧的 JDK 版本。


我遇到了同样的问题。我想使用 JDK 11,但根据 JDK-8212780 JEP 343 计划用于 JDK 13,所以我们需要再等一会儿。在 Java 8 - 10 下打包“ native ”自包含应用程序不是问题,因为包含了打包程序(至少在 Oracle JDK 中)。

今天我发现了 this email并认为我想试一试:您可以在 github.com/skymatic/javafx11-test 上查看我的示例项目,我使用从 JDK 开发分支向后移植的 jpackager 成功打包。

我在这里做了什么:

  • 使用 OpenJDK 11 和 OpenJFX 11 创建了一个新的 HelloWorld 项目。
  • 下载打包器并从 Maven 构建中调用它(注意它需要与 JDK 一起驻留并且您需要设置 JAVA_HOME 才能工作...)
  • 奖励:我使用 jdeps 找出我的非模块化 jar 的依赖项并设置 --add-modules 参数以生成较小的运行时镜像<

当然对于模块化项目来说更容易:在this commit to my sample project你可以看到我使用了 jpackager 的模块路径和主模块参数,而不是类路径和主类。

关于java - 如何在具有非模块化依赖项的 Java 11 中打包应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53548430/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com