问题标签 [java-module]
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 9中的自动模块可以读取导出包中命名模块的类吗?
我想看看 Weld CDI 容器如何与 JPMS 一起工作。所以我有以下配置。
我有我的命名模块和weld-se-shaded 作为自动模块。在我的模块中,我有
新班级
新豆类
这就是结果
如何解释这个异常
原因:java.lang.reflect.InaccessibleObjectException:无法使字段私有 com.foo.NewBean com.foo.NewClass.bean 可访问:模块 my.module 没有“打开 com.foo”到模块weld.se.shaded
这里 有一张表
,我可以从中了解到自动模块可以读取命名(应用程序)模块。那为什么不呢?
java - 是否可以在 Java 9 中按模块名称获取服务?
让我们考虑一下这种情况 - 有 N 个模块,它们都具有相同接口的服务 ( com.foo.SomeService
)。是否可以通过模块名称(my.module
)获取此服务,而无需迭代所有模块的所有服务?
java - 如何在 Java 9 中通过名称获取模块?
如何java.lang.Module
在 Java 9 中通过字符串名称获取?
例如,我们有
java - 如何从 Java 9 中新创建的层中的模块调用服务?
我有三个模块:模块-a、模块-b、模块-c。模块-a 和模块-b 在引导层。我自己创建的模块-c 层。
Module-a 有一个接口com.mod-a.Service
,在它的 module-info 中我有:
Module-c 实现com.mod-a.Service
并在其模块信息中我有:
module-b 使用 module-c 创建新层,并调用 module-c 服务。在其模块信息中,我有:
在 module-b 中,我以这种方式使用 module-c 创建新层:
但是,创建层后,我无法在 module-b 中调用 module-c 的服务。以下代码:
输出:
我的错误是什么?
java - 如何在 Java 9 中删除模块层?
我有三个模块:模块-a、模块-b、模块-c。模块-a 和模块-b 在引导层。我自己创建的模块-c 层。Module-c 具有该服务的 JPMS 实现,该接口位于 module-a 中。
这是我在 module-b 中使用 module-c 创建层的方式。
然后在模块-b 中,我从模块-c 调用服务。服务执行完成后,我不再需要 module-c 和新创建的层。如何将其从 JVM 中移除并释放所有资源?够了吗layer = null;
?
java - 如何通过 Java 9 中的模块获取 jar 文件名?
例如,我有somefile-0.1.jar
包含 JPMS 模块的 jar 文件。此外,我参考Module somemodule
了这个模块。
如何通过模块获取 jar 文件名(使用somemodule
参考)?我已经检查了 Module API,但没有找到方法。
java - ResolvedModule、Module 和 Observable Module 有什么区别
这些状态中的每一个的文档如下:
已解析模块图中的模块。ResolvedModule定义了配置方法来获取已解析模块所在的配置。它定义了引用方法来获取对模块内容的引用。
表示运行时模块,命名或未命名。
问:- 这两者何时不同,是在编译和运行时,还是只是模块的不同表示?
另一方面,模块路径定义
编译时或运行时环境中内置的模块,以及由模块路径上的工件定义的模块,统称为可观察模块的宇宙。
问:- 所有这些都相关吗?有人可以举例说明如何以及在什么时间解释这个概念吗?
java - 创建专用于特定模块化应用程序的自定义运行时映像
假设我正在开发一个由 2 个模块组成的模块化应用程序:com.spacey.explorer
这取决于com.spacey.rocket
模块。我在某个bin
目录中有他们的模块化 JAR 文件。
我想准备轻量级 JRE 来运行它。很明显,我使用了jlink工具:
现在,当我在 JRE 中列出模块时,我得到以下信息:
也就是说,我的应用程序模块被捆绑到 JRE 中。但是,如果我想构建一个仅包含 JDK 起源的模块的 JRE,这些模块足以运行我的应用程序并将我的应用程序模块分开,我必须知道我的 JDK 依赖项是什么(在示例中这只是java.base
)并明确指定它们喜欢:
有什么方法可以让jlink为我做这件事吗?或者任何可以为我找出那些源自 JDK 的依赖项的工具?
java - Java 9 中找不到模块 javafx.controls
我在两个文件中有两个 JPMS 模块:modulea.jar
和moduleb.jar
. Modulea 需要javafx.controls
模块。我需要在新层中使用这些模块,所以我这样做:
我以为JDK模块会自动加载,但我明白了
同时当我做: 时java --list-modules
,输出是:
如何解决?
java - Java 9 迁移期间未找到不兼容的类型、等式约束和方法
在将我们的一个项目迁移到Java 9(build 9+181)时,我遇到了一个特殊的问题,在某些与类型推断和java-module相关的使用中的库中实现看起来不正确。我正在使用一个dropwizard-core(1.1.0)
和guice(4.1.0)
配置如下:
使用以下组合,配置对我来说很好:
- Java 8 + Maven 3 + Compiler Plugin 3.6.1 [我们的原始设置]
- Java 9 + Maven 3 + Compiler Plugin 3.7.0(命令行和 Maven 配置更新)
但是当我切换到模块结构然后尝试编译由这些类组成的 maven 模块时,我在以下过程中遇到了这些错误mvn clean install
:
我不确定为什么会发生这些错误,以及它们是否与使用的模块结构有关。
Q1。是否有任何类型推断相关的更改会影响模块结构更改(如果可能的话)的 Maven 编译,请记住使用的依赖项?
同样在迁移时,我主要使用 IntelliJ 建议的自动模块名称来构造module-info
as :
Q2。如果这不是迁移时的回归问题,为什么我们之前的设置没有失败?这是否还要求我们更改服务中的代码,或者如果这可能有帮助,我们是否应该等待库迁移到模块?
注意:已尝试查看依赖版本和类实现的使用情况。它们在以前的设置和当前设置中是相同的。
请让我知道我可以提供帮助的任何进一步信息。
更新:我能够在我创建的微服务示例中重现相同的内容,以将其与我的项目的其余部分隔离开来。