问题标签 [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.

0 投票
0 回答
100 浏览

java - 我如何知道应该将哪个模块导入 java 运行时映像?

我在 java 运行时映像中运行我的简单应用程序,所以我编写了一个 dockerfile 来创建一个 java 运行时映像并基于它构建一个 docker 映像。但是当我启动它时,抛出了 ClassNotFoundException 异常。

https://docs.oracle.com/en/java/javase/11/docs/api/java.xml/org/xml/sax/SAXNotRecognizedException.html 这个类是在 java.xml 模块中定义的,所以我添加了这个模块在我的 java 运行时映像中。

这是我的码头文件:

这是整个错误跟踪堆栈。

0 投票
0 回答
5205 浏览

java - Java 11 JLink 出现错误:自动模块不能与 jlink 一起使用:来自文件的 com.microsoft.sqlserver.jdbc

我正在尝试使用 Java 11 将 JDBC 连接器模块添加到我的项目中。我下载了适用于 Java 11 的 MSSqlServer JDBC 驱动程序 7.2

https://www.microsoft.com/en-us/download/details.aspx?id=57782

我添加了模块:

然而,当我尝试清理+构建时,NetBeans 告诉我:

我很确定这是因为 jar 没有已编译的module-info.java. 但是,我想知道是否有办法在其中注入一个?

0 投票
2 回答
530 浏览

java - 如何将额外的文件与 jlink 图像捆绑在一起

我正在使用 Gradle 和Badass JLink 插件来分发我的软件。不幸的是,我无法弄清楚如何在图像中包含某些文件(例如 README.md、一些测试输入等)。我认为它需要一些工作build.gradle,但到目前为止我还无法弄清楚。

按照这些说明application使用插件的distZip功能很容易做到这一点,但我更喜欢使用 jlink 图像进行分发,这样用户就不需要安装 Java。

这甚至可能与jlink有关吗?如果没有,这似乎是一个巨大的缺点。

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 投票
1 回答
291 浏览

java-9 - 是否可以使用 jvm 模式使用 prunsrv 启动 Java 运行时映像?

背景:从 Java 9 开始,可以使用jlink创建自定义运行时映像(JRE+程序)。

可以使用prunsrv.exeApache Commons Daemon的一部分)将 Java 程序安装为 Windows 服务。

prunsrv可用于三种启动模式:javajvmexe

我设法使用exe模式启动自定义运行时映像,并使用jvm模式启动传统 Java 程序(类路径 + 普通 JDK),但我无法使用jvm模式(不会启动新进程)与图像.

prunsrv有一个“ JvmOptions9 ”参数,这可能暗示可能支持这种情况,但我不确定。

0 投票
1 回答
205 浏览

java - JLink:在单独的文件中导出 java 模块

使用 JLink,我能够用一个微型 JVM 构建我的应用程序。目前,构建是整体的:所有的 java 模块都融合在一个文件中(可以用 jimage 提取):

现在,我想进行增量构建:当我部署我的应用程序时,我只想上传自上次发布以来发生变化的模块。

可以将 JLink 配置为在单独的文件中导出不同的 java 模块吗?

例如

0 投票
1 回答
1016 浏览

java - 如何将 launch4j 与 Java 自定义运行时映像一起使用?

Launch4j是否可以使用模块化 Java 应用程序制作捆绑/包装 exe 文件?

该应用程序是模块化的 (jmods),使用 导出jlink,它不会生成任何 jar,而是生成一个custom runtime image(几个文件夹),其中包含一个运行命令的 bat 文件:java -m package/path.to.class

我阅读了 Launch4j 文档,它说 jar 标签是可选的。尝试使用带有 gui 的程序(它甚至不启用运行按钮)和 Windows cmd(launch4j: Application jar 不存在。

编辑1:

这篇 SO 帖子与我的问题有关。Launch4j 还没有这个功能。

解决方案(直到没有其他工具能够这样做):

  • 使用 java custon 运行时映像制作 7z 文件:

    /li>
  • 使用以下参数创建一个config.txt 文件:

    /li>
  • 生成exe文件:

    /li>

注意:我需要 7zS2.sfx (27kb) 版本文件,我在这里通过引用此 SO 帖子找到了该文件。其他版本不适合我。

0 投票
0 回答
286 浏览

java - @ComponentScan 未检测到 jlink 的 Java 运行时映像中的 bean

我在 Java 11 上使用 JavaFX 来创建桌面应用程序。该应用程序被捆绑到一个自定义运行时映像中,其所有模块及其依赖项使用jlink. 对于依赖注入,应用程序依赖于 Spring 框架。

我知道 Spring 模块目前不包含 a module-info.class,而是作为“自动模块”发货。由于无法与自动模块捆绑,我使用 Moditect Maven 插件jlink手动添加到每个 Spring 依赖项 JAR。module-info.class以下是 的各个部分pom.xml

使用上述模块定义,jlink成功没有问题,我的应用程序被捆绑到包含所有依赖项的自定义运行时映像中。

但是,如果我使用捆绑的 JRE 运行应用程序,就会出现问题:

导致IllegalAccessException

根据这个线程,可以使用以下方法修复错误--add-reads

IllegalAccessException相反,抛出了一种不同的类型:

根据错误消息的建议,我随后添加了另一个--add-reads参数:

现在应用程序启动并读取它的AppConfig.class,它带有注释@ComponentScan

但是,Spring 不会检测到使用构造型 ( @Component, @Service) 注释的项目的单个类,如输出Main.java所示:

为什么会@ComponentScan错过所有带注释的课程?AppConfig.java位于我的应用程序的根包中,所有类都位于子包中,因此 Spring 应该能够根据给定的配置检测它们。

为了完整起见,这module-info.java是我的应用程序:

0 投票
1 回答
526 浏览

java - @ComponentScan 不检测模块路径中的类

我正在使用 Java 11 和 Spring 开发 JavaFX 应用程序。应用程序模块使用 与自定义 JRE 捆绑在一起jlink,它只允许将命名模块包含在包中。由于 Spring 不提供命名模块,而是依赖自动模块来实现 Java 9 模块系统支持,因此我使用moditect将模块描述符 ( module-info.java) 添加到 Spring JAR。

编译、编译jlink和执行应用程序没有任何问题。@Component但是,尽管我的AppConfig类带有注释,但 Spring 没有检测到我的应用程序的任何类注释@ComponentScan

Main中,我创建了一个AnnotationConfigApplicationContext基于AppConfig并打印所有已注册的 bean 以及类路径上可用的资源:

如果我使用 IntelliJ 运行应用程序,则会PathMatchingResourcePatternResolver在类路径上找到我的所有类(我猜是因为 IntelliJ 使用类路径而不是模块路径运行应用程序)。因此,通过组件扫描检测所有组件并创建相应的 bean:

但是,如果我通过jlink'ed 包运行应用程序,即在使用模块路径的自定义 JRE 上,Spring 无法检测到我的任何类:

PathMatchingResourcePatternResolver没有找到任何类(因为现在所有内容都位于模块路径上),并且组件扫描没有实例化一个 bean。

如果我将组件类手动导入AppConfig,则 bean 会正确创建并通过以下方式注入@Autowired

为什么 Spring 在使用时能够创建 bean @Import,但无法通过 检测它们@ComponentScan?如何通过 解决我的组件@ComponentScan

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 上上传了示例项目