问题标签 [module-info]
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 - 如何在 SBT 中创建拼图模块?
我想使用 jlink 从 Scala 源代码为所有平台(darwin、linux、windows)创建自包含的应用程序包。似乎jlink
只适用于新的(相对)拼图模块 - 所以我需要将我的代码打包为一个模块。在 Java 世界中,通过将特殊的 module-info.java 文件放入将成为模块的包中似乎很容易实现。
我试图跟随直觉,只是将这个 module-info.java 放入src/main/java/my.package.name/module-info.java
. 虽然这不起作用。似乎scalac
正在尝试像通常的 Java 文件一样读取 module-info.java(事实并非如此),因此出现错误
我需要做什么才能将我的 Scala 代码打包为一个模块?
打开 JDK:11 Scala:2.12.4 SBT:1.1.6
java - 是否可以跨 Java 模块使用 SharedSecrets?
鉴于:
- 模块
A
和B
, whereB
导入A
. - 模块
A
出口external.class1
。它定义但不导出external.class1.secretProvider
,internal.SharedSecrets
andinternal.class2
(更多内容见下文)。 - 模块
A
使用SharedSecrets 机制在using中授予external.class1
对私有方法的访问权限。internal.class2
external.class1.secretProvider
我希望授予external.class3
(在 Module 中定义B
)对私有方法的访问权限,但internal.class2
我无法这样做。internal.SharedSecrets
external.class1.secretProvider
A
有没有办法在不将它们导出给全世界看到的情况下B
访问's 的秘密?A
java - 在 maven 和 java 9+ 中使用 java 自动模块 cdi.api
我想在 java 模块中使用 CDI 功能。我希望我的代码保持通用并且不依赖于特定的实现。
我使用 Java 11 和 Maven 3.6.0。
为简单起见,我的目标简化为javax.enterprise.context
在 java 文件中导入包。当我在没有模块(没有module-info.java
)的情况下这样做时,一切都很好。
现在,当我在module-info.java
不需要其他模块的情况下添加 a 时,我收到以下错误消息:
package javax.enterprise.context is not visible (package javax.enterprise.context is declared in the unnamed module, but module javax.enterprise.context does not read it)
到现在为止一切正常。这个消息很有意义,因为我不需要 CDI 模块。
为了解决这个问题,我添加requires cdi.api;
到我的module-info.java
,只是得到以下错误:
module not found: cdi.api
我的理解是 CDI 库应该采用受 jar 文件名称启发的自动模块名称。当我使用-X
指令运行 maven 时,我cdi-api-2.0.jar
在类路径中看到。我相信,如果我错了,请纠正,这应该转换为cdi.api
自动模块名称。但这仍然行不通。
这是我的最小示例:
pom.xml:
src/main/java/module-info.java:
src/main/java/com/acme/Main.java
任何见解都受到高度赞赏。
eclipse - 如果 module-info.java 存在,Eclipse 2018-09 找不到测试类
我在 Eclipse 中有一个简单的 Java 11 项目,具有以下依赖项:
项目结构如下:
module-info.java仅导出模块 simple.tests 中的包simple.tests。
我已经定义了以下 Gradle 任务来正确设置 Eclipse 项目及其依赖项。测试依赖项位于类路径上,这些仅对测试源可见。
我可以使用以下设置在 Gradle (5.0) 中编译和运行测试用例:
但是,我无法在 Eclipse 中执行 JUnit 测试,因为我收到一条错误消息(没有使用测试运行器“Junit 5”找到测试)和以下堆栈跟踪:
将测试依赖项移动到模块路径并不能解决问题。在这种情况下,即使在将 Junit Launcher 添加到模块路径之后,我也会得到以下堆栈跟踪:
我找到的唯一解决方案是删除 module-info.java 文件。删除模块描述符后,测试用例可以在 Eclipse 和 Gradle 中执行。
我的配置中有错误的设置吗?还是我做错了什么?
先感谢您!
java - Java:`sun.awt.image` 包是否已弃用?
我想使用一些sun.awt.image.PNGImageDecoder
在我的项目中使用的代码。问题是源代码基于Java 8,而我的项目使用JDK 9+ (11)。所以我得到了这个错误:
包 '
sun.awt.image
' 在模块 'java.desktop
' 中声明,它不会将其导出到未命名的模块。
对于import sun.awt.image.*
,并且:
符号在模块 '
java.desktop
' 中声明,它不导出包 'sun.awt.image
'
用于使用PNGImageDecoder
或ImageDecoder
等。
经过一番努力寻找解决方案,我发现了一些类似的情况,建议添加requires java.desktop;
到module-info.java
文件中(比如这个案例和这个案例)。module-info.java
但是当我意识到这个解决方案只有在你的项目已经有一个文件并且你缺少一个使用过的模块时才有用。
我的项目还没有这个文件(注意第一条错误消息中的“未命名模块”)。据我所知,这意味着所有模块都是自动导入的。因此,添加此文件并添加该行没有任何效果,除了(更改错误消息和)导致我的代码的其他部分出现类似问题(当然,可以通过将所需模块添加到module-info.java
文件来解决)。
确定我在(JDK 11的)文件夹中导入了所有模块jmods
,但问题没有解决:
我知道这个包(sun.awt.image
)存在于java.desktop
(JDK 11的)模块中,但不知道如何访问它。
我使用 IntelliJ IDEA 作为 IDE。
java - WildFly 服务模块加载器 - jdk.incubator.http.HttpClient 上的 ClassNotFound
我正在使用 WildFly15 和 JDK 10 来使用新的 HTTP 客户端构建一个应用程序,当我jdk.incubator.httpclient
在我的模块中声明它是唯一且单一的要求时,它工作正常。(我不能去JDK11,因为我们需要以32位运行)。
这是两组值的完整命令行(我从 Eclipse 复制了它):
我正在正确添加添加--add-modules jdk.incubator.httpclient
到 JVM 启动。
但是,当我删除javaee.api
模块的注释并将其添加为要求时,我得到ClassNotFoundException
:
由于我在 EJB 中使用 HTTP 客户端 API,这可能是 javaee.api 中断构建的原因吗?如何解决?
使用选项 use 启动 java--show-module-resolution
确认模块已加载:
java - Java 模块指令如何影响对模块的反射访问?
根据https://www.oracle.com/corporate/features/understanding-java-9-modules.html,Java Module 系统引入了以下指令:
- 出口,出口……到
- 用途
- 提供...与
- 打开,打开,打开……到
每个指令对使用反射访问内部成员的外部模块有什么(如果有)影响?
例如,是否exports <package>
允许外部模块使用反射访问导出包的所有public
成员?其他指令呢?protected
private
java - 模块信息中的 Javadoc 注释
module-info
除了package-info
以前存在的文件之外, Java 9 模块功能还添加了(更高级别的)文件。(源代码)文件是否可以module-info.java
包含 JavaDoc 工具将提取并(有用地)作为模块级文档呈现的标记注释?
java - 如何使 module-info.java 保持最新
无论如何要找出您的模块需要什么?
在编写了一个基本的微服务之后,需要进行一些修改才能确定我需要添加到我的 module-info.java 中的内容。
这是一个带有硬编码端点的简单应用程序;把它做好似乎相当痛苦,我找不到任何可以给我任何提示的东西需要添加。(我使用这些模块多次运行该应用程序,但会因为缺少某些东西而出错,不清楚缺少什么)
我有更大的微服务需要转换并且可以看到它非常痛苦