问题标签 [jlink]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java的--add-export在jlinking期间没有效果
我的应用程序需要访问一个未导出的类com.sun.webkit.network.CookieManager
,因此,在编译它时,我添加了这个选项:
完整的maven-compiler-plugin
配置如下所示:
它编译得很好。如果我删除该选项,我会收到此错误:
所以,它看起来确实是它的工作选项。当我使用以下命令行执行 jlink 项目时,问题就来了:
一切似乎都正常,但是当我尝试运行它时,我收到了这个错误:
为了访问该课程,我还缺少什么?
java - java jlink endian 是特定的吗?
似乎没有关于此的文档。在 jlink 中,您可以指定图像是大端还是小端。如果您不指定任何内容,则使用本机字节顺序。
我可以构建一个图像并且不指定字节序,或者只指定小字节序并且它运行(我在基于 i7 的机器上),如果我指定大字节序,则在初始化过程中会出现错误,因为找不到对象。因此,它似乎无法检测到不匹配并反转字节序。
查看 jlink 的底层,在 jimage ImageStream 中它分配 ByteBuffers 以写出图像。这些是特定于字节序的。
传入的字节序是您指定的字节序,默认为 ByteOrder.nativeOrder(),它是底层硬件的字节序。
因此,在我看来,jlink 打破了编译一次,随处运行的想法,因为链接在小端平台上的 jlink 图像在大端平台和 v/v 上不起作用。
谁能确认我的分析是正确的,因为我没有方便的大端平台来进行健全性检查。
谢谢,
java - 如何从我的 Java 应用程序更新我的 JRE(或运行时映像)?
我有一个应用程序,它由 JRE(或自定义运行时映像,如 jlink 文档所称)、JAR 文件和在 JRE 上运行 JAR 的方法(bash 或批处理文件或 exe 或 .app包裹)。
我想发送应用程序的更新(它正在工作,我可以连接到我的服务器并下载 newJRE.zip 和 newJAR.jar),但我不知道用新 JRE 替换当前运行的 JRE 的最佳方法.
我尝试将新 JRE 解压缩到单独的文件夹,使用 ProcessBuilder 在新 JRE 上重新启动我的 JAR,然后在原始 JRE 上调用 System.exit() 并从新 JRE 中删除旧 JRE 并将新 JRE 复制到原始位置,最后在该 JRE 上再次重新启动我的应用程序。这不起作用(在 Windows 上,我还没有在 Linux 或 Mac 上尝试过),因为重新启动的新 JRE 似乎在旧 JRE 中的某些文件上持有文件锁(或句柄?),所以它可以不要删除它们。我还尝试运行一个批处理文件,删除旧 JRE 并将其替换为新 JRE,但它也无法删除旧 JRE 中的所有文件。
这可以用 Java 完成,还是我必须分别为每个平台编写更新逻辑?最好的方法是什么?
maven - 带有 moditect 和 Java 11 的 JavaFX Maven
根据是否有办法在使用 maven-jlink-plugin 时添加 maven 依赖项? 有没有人在 Java 11中将 ModiTect Maven 插件与 JavaFX 一起使用。我尝试将 maven-jlink-plugin 用于:
但得到:
通过阅读另一篇文章,我知道我必须生成模块信息,但希望有人已经在他们的 pom 中使用了 ModiTect Maven 插件,每次都会自动为他们完成。
我将在我的学生的所有程序中使用 JavaFX,并且不想让他们每次都为所有 JavaFX 模块手动执行。
已编辑
我尝试使用以下 pom
但我收到此错误:
有什么想法吗?还是我应该等到 Java11 完全发布并希望有人将模块信息添加到 JavaFX 文件中?
java - Java jlink 从 conf 目录读取配置
由于 Java 正在停止对 webstart 的支持,我们目前正在寻找另一种方法。我们想将我们的客户端应用程序与 jlink 捆绑在一起。到目前为止,应用程序运行良好,但存在问题。
客户端应用程序如何知道它需要与哪个服务器通信?
我们想在使用下载器 servlet 下载期间将配置文件添加到 jlink 链接的 zip 文件中。类似于 JNLP Servlet
JLink-Zip 看起来像这样。
我怎样才能得到这个文件的位置?
我已经试过了
或者
但这只会给我像 /client.module 这样的模块名称
无论您从哪里启动启动器,我都想获取配置文件。
在此先感谢您的帮助。
真诚的罗尔夫
java - 将 jlink 与自动模块一起使用
我有一个依赖于自动模块的显式模块化项目;例如在 java.activation 上。仍然可以使用jlink吗?
请参阅此模块信息.java:
那么jlink无法添加模块:
据我了解,自动模块无论如何都会包含整个类路径。所以我想用 jlink 创建运行时映像没有任何好处?
另请参阅:什么是自动模块?
有没有可能规避这个问题?也许为这些依赖项生成一个 module-info.java ?
java - 如何从 Java Web Start (JDK 8) 升级到 jlink (JDK 9+) 以实现自动更新应用程序?
Java 8 和之前的版本有Java Web Start,当我们改变它时它会自动更新应用程序。Oracle 建议用户迁移到jlink,因为这是新的 Oracle 技术。到目前为止,这听起来不错。这带来了许多好处:
- Windows、Mac 和 Linux 上的本机代码
- 代码的模块化(尽管 Proguard 也这样做)
- 使用新的、受支持的技术。
问题:我找不到使用 jlink 自动更新的规范 Java 解决方案。
有人会认为 Java Web Start 可以继续使用,尤其是如果您随便阅读此文档。请注意,Java Web Start 继续在显着位置列出。但美中不足的是:Oracle 正在弃用 Java Web Start。它计划在 JDK 11 中删除。那么,官方的前进道路是什么。如果做不到这一点,人们是否有一种标准的方式进行?
出于此问题的目的,以下内容超出了范围:
- 每年向拥有功能丰富的企业解决方案的人支付巨额费用。要分发的应用程序已经打包到一个小于 50MB 的 jar 中。
- 强制用户运行 InstallShield 风格的应用程序重新安装新版本,然后每次推送更新时手动卸载旧版本。那是1990年代。
- 将整个应用程序移植为 Web 应用程序,重写 UI 和客户端逻辑以适应浏览器,并处理所有不兼容的问题。该应用程序的作者在GWT上工作,并且确切地知道 Web 浏览器的功能。不幸的是,他们也知道所需的努力程度。
- 允许用户继续运行旧版本的应用程序。那也是1980年代。现代应用程序更新迅速,并且支持曾经发布的应用程序的每个版本是站不住脚的。这就是我父亲的 COBOL 应用程序必须处理的问题,他并不喜欢它。我希望技术进步了。
- 继续使用 Java Web Start。直到/除非 Oracle 改变主意,Java Web Start 是一种注定失败的技术。
java - JMOD 架构会影响 Javac 生成的类文件吗
我正在编译一个 Java 11 应用程序,然后通过调用jlink
命令链接各种架构。用于javac
命令的 jmod 文件的体系结构是否会以任何方式影响输出?javac
使用 Windows jmod 文件编译 ( ),然后jlink
使用 Linux jmod 文件链接 ( )是明确定义的行为吗?
我的直觉是根据 jmod 文件中定义的接口javac
进行编译,无论底层实现如何,它都应该匹配,但我找不到任何说明这一点的文档。对于我的具体情况,我链接到 OpenJFX 库。
java - 使用 jlink 为胖 Jar 文件优化 JVM 模块
JDK9 最酷的特性之一是 jlink ,它制作了一个小的 JVM 优化版本来运行应用程序,这非常有用,尤其是在 docker 等容器中运行应用程序时非常有用。但是,仅传递您拥有的 JAR 文件并获得优化的运行时来运行它并不是很简单。
就像我使用 Gradle 并创建了一个胖 jar 文件(所有依赖项都在一个 jar 文件中),而我只是想使用这个 jar 文件为其生成 JVM?有什么解决办法吗?
java - 使用 JavaFX 11 的自定义 JRE
我正在使用 JDK11 和 JavaFX11。
我使用 Jlink 为我的示例 FX 模块程序创建了一个自定义 JRE,但是当我尝试使用自定义 JRE 运行时,它会呈现如下错误:
这就是我创建自定义 JRE 的方式(没有错误):
这就是我尝试运行的方式(有错误):
错误消息:
这是我的编译方式:
源 JavaFXDemo.java:
module-info.java
:
我就是这样编译的。
编译后,我的模块类文件如下:
我可以成功运行如下:
不过,我可以使用默认的 JDK11 运行。
如何成功创建自定义 JRE 并使用它运行示例 FX 模块程序?