问题标签 [jmod]

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.

0 投票
1 回答
120 浏览

jshell - jshell 是否适用于 jmod 文件?

我遵循了一些示例,并创建了一个简单的 jmod。我将 jmod 放在我的 jmod 文件夹中,而不是放在 java jmods 文件夹中。现在,我读到 jshell 可以导出模块,但我确实明白。jshell 可以与 jmod 一起使用吗?举个例子?在 java jmods 文件夹中有很多 jmod 文件,但我不知道如何在 jshell 会话中使用它。

0 投票
2 回答
16956 浏览

java - 为什么 Java 9 引入了 JMOD 文件格式?

Java 9 提供三种方式将编译后的代码打包到文件中:

  • JMOD
  • 图像

JIMAGE 针对速度和空间进行了优化,并由 JVM 在运行时使用,因此引入 JIMAGE 是有道理的。JIMAGE 文件不应该发布到 maven repos 或在编译或链接时使用。

文档声称 JMOD 可以存储本机代码和 JAR 文件无法存储的其他内容,并且开发人员可以制作和分发自己的 JMOD 文件。JDK 附带的jmods/目录包含 JDK 的所有模块供用户依赖。

问题:

  • 为什么 Java 9 引入了 JMOD 文件格式?
  • 库作者应该分发 JMOD 文件还是 JAR 文件或两者兼而有之?
  • jmod 文件是否应该发布到 maven 存储库?
0 投票
6 回答
7256 浏览

java - 如何提取文件 jre-9/lib/modules?

JRE-9/lib目录中(至少在 Windows 上),有一个名为的新文件modules,其大小约为 107 MB。是否可以提取该文件或在其中列出 java 模块?

我可以看到一个名为jmodat 的新工具可用jdk-9/bin/jmod.exe,但它用于读取.jmod位于 at 的文件jdk-9/jmods,它无法读取该文件modules

0 投票
1 回答
762 浏览

java - 在 Java 9+ 中使用 JRE 运行时,我可以提供运行时编译器访问权限吗?

我正在将应用程序迁移到 Java 10。我们的应用程序通常使用 JRE 运行,但我们允许用户通过捆绑和使用反射来按需tools.jar加载实例来编译自己的自定义代码。JavacTool我们的方法如下所示:

这是必要的,因为javax.tools.ToolProvider.getSystemJavaCompiler()从 JRE 运行时返回 null。我们的方法在 Java 8 上运行良好,但tools.jar在 Java 9 中被删除,我需要的类com.sun.tools.javac.api.JavacTooljdk.compiler模块中,它仍然是 JDK 的一部分,但不是 JRE。

jdk.compiler启动 JRE 时有什么方法可以加载模块吗?根据这个答案,我怀疑不是,我尝试使用--add-module的结果是: java.lang.module.FindException: JMOD format not supported at execution time

我还缺少另一个解决方案吗?

0 投票
0 回答
69 浏览

java - JMOD 架构会影响 Javac 生成的类文件吗

我正在编译一个 Java 11 应用程序,然后通过调用jlink命令链接各种架构。用于javac命令的 jmod 文件的体系结构是否会以任何方式影响输出?javac使用 Windows jmod 文件编译 ( ),然后jlink使用 Linux jmod 文件链接 ( )是明确定义的行为吗?

我的直觉是根据 jmod 文件中定义的接口javac进行编译,无论底层实现如何,它都应该匹配,但我找不到任何说明这一点的文档。对于我的具体情况,我链接到 OpenJFX 库。

0 投票
0 回答
605 浏览

java - 尝试使用 jmod 文件的困难

我在 Windows 上使用 JDK 11。我实现了一个模块化的 JAR 文件 Uti.jar(在目录 dirLib 中),它在单个包中包含一些类,比如 pkg。

然后我实现了一个简单的客户端,比如 app.Maine,而不是模块,它有一个 main 方法(一个控制台应用程序),它使用 Uti.jar 中包含的一个类,比如 pkg.MyClass。

我可以使用以下命令执行控制台应用程序:

有用。

但是我在尝试使用 JMOD 文件而不是 Uti.jar 时遇到了问题。我使用命令构建了 Uti.jmod

它似乎包含与 Uti.jar 相同的类,但命令

给出一个错误,NoClassDefFoundError pkg/MyClass。

我在哪里弄错了?

提前致谢

0 投票
0 回答
163 浏览

java - 如何将 JavaFX12 应用程序部署到具有相同代码库的多个平台

我按照说明在 Windows 10 上使用 NetBeans 11 创建“模块化 IDE”项目:

https://openjfx.io/openjfx-docs/#IDE-NetBeans

我最终创建了一个如下所示的项目:

在此处输入图像描述

然后我运行“清理和构建”(在 nebeans 中设置 jlink+jmod),我得到一个 Windows 分发文件夹,其中包含自运行的 java 运行时,其中包含所有依赖项(大约 90 兆)

在此处输入图像描述

我可以通过命令提示符“HelloFX”或双击“HelloFX.bat”来运行它

在此处输入图像描述

这一切都很好。但是,我在 netbeans 中的“HelloFX 项目”使用的是 Windows JavaFX 库和 Windows Jmods 库。这意味着如果我想部署到 Windows 机器而不是 Mac,这个过程将起作用。我必须为 Mac 创建一个全新的项目吗?有没有办法我可以单击“Clean and Build for Mac”和“Clean and Build for Windows”按钮?或者有没有办法使用相同的代码库?我基本上想将 JavaFX 8 项目代码库引入这个新结构。有没有好的方法来做到这一点?

0 投票
1 回答
329 浏览

java - maven-jmod-plugin:3.0.0-alpha-1 给出错误创建失败。IllegalArgumentException

我正在将我的 Java Swing 项目从 1.8 更新到开源 JDK 12。所以我创建了一个父应用程序,然后创建了一个 JLink 模块应用程序,并将父项添加到我的原始项目中。

当我尝试运行 clean package 时,出现此错误:

无法在项目查看器上执行目标 org.apache.maven.plugins:maven-jmod-plugin:3.0.0-alpha-1:create (default-create):执行目标 org.apache.maven.plugins 的默认创建: maven-jmod-plugin:3.0.0-alpha-1:create 失败。

我的 POM 文件结构如下。

家长会:

应用程序Pom:

链接器Pom:

谢谢

0 投票
2 回答
1275 浏览

java - 使用 JMod 插件部署应用程序时出现错误 java.util.zip.ZipException:重复条目:classes/META-INF/MANIFEST.MF

我使用 OpenJDK9 并创建了一个父子结构来使用 JLink 和 JMod 部署应用程序。

我按照互联网上的拼图示例来创建我的 App 结构。在我使用 JMod 3.0.0-alpha-1 时,路径必须是目录之前,然后我发现它是插件中的一个错误,3.0.0-alpha-2-SNAPSHOT 尚不可用,所以我构建它,路径错误消失了但我得到了新的错误。

这些错误是由我在 POM 文件中添加的依赖项引起的,如果我注释了项目构建成功的依赖项,但我想用这些依赖项构建项目。

原因:java.util.zip.ZipException:重复条目:classes/META-INF/MANIFEST.MF

我已经在 git 上上传了项目,也在GitHub 上上传了示例项目