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

0 投票
1 回答
2475 浏览

java - Intellij: Java 11: export module: package not found {module not found}, module-info.java

I'm trying to create a simple modular programming application.

My project consists of two modules-

  1. com.module.model

  2. com.module.util

when I'm trying to export the module com.module.model in module-info.java.

IntelliJ cannot find the package to import.

(However it should give me the error of module not found)

The same problem stands for 'requires module' too.

I have provided all the modules in the dependencies for com.module.model

com.module.model

module dependency

Solutions I already tried-

  1. Build the modules separately (before adding the export line) and the whole project (maven clean install) as whole.

  2. Invalidated caches and restarted.

  3. SDK and Language level is set to 11.

0 投票
1 回答
1480 浏览

java - 学习 Java Native Access 时包 com.sun.glass.ui 出错

我正在尝试在 JavaFX 项目中使用 Undecorated 阶段,stage.initStyle(StageStyle.UNDECORATED);. 这是一个模块化的 Gradle 项目。它也是一个多项目构建,虽然因为我在 IntelliJ 中工作,所以将它称为多模块构建可能更合适。

我希望能够向这个未装饰阶段添加常规功能。我已经能够添加通常的最小化、恢复和关闭按钮,但是如果用户单击 Windows 任务栏中的程序图标,我希望它也能最小化和恢复。

在此处输入图像描述

我在这个较旧的 StackOverflow 帖子中找到了可能会执行此操作的代码,但我遇到了一个我无法弄清楚的错误。

布赖恩(海报的)代码:

导致我出错的部分是com.sun.glass.ui.Window.getWindows().get(0).getNativeWindow();

错误:

我不太了解这个错误。sun.glass.ui 包是在 javafx.graphics 中声明的,因为我试图在我的代码中使用它,还是它驻留在 javafx.graphics 模块中但无法访问?我最好的猜测是这个包属于某个模块,我不知道我需要将其作为 Gradle 中的依赖项包含在我的 module-info.java 文件中的名称。这是我有能力做的事情,但我的谷歌搜索结果很少,这解释了这个包的来源。这个 SO question下的评论表明根本不应该使用这样的 com.sun 包,并且似乎暗示可能有一些等效的更好的使用。

0 投票
0 回答
32 浏览

java - Java ClassLoader.getResource(String name) 找到目录但其中没有文件

在我的 Maven 项目中,资源文件夹如下所示:

  • 资源
    • 图片
      • 测试图像.png

如果我打电话

我得到“文件:/C:/Users/XYZXYZ/IdeaProjects/projectName/core/target/classes/images/”

如果我像这样添加文件名:

我得到“空”。这怎么可能?这里会发生什么?

编辑:我注意到它可以工作(不再给出 null),只要我删除我的 module-info.java 问题:我需要我的 module-info.java。有小费吗?

0 投票
0 回答
317 浏览

java - 如何通过注释处理器生成模块信息?

我有一些代码在编译时通过 java APT 生成一些服务,在 java9 之前,我通过 APT 生成 java 源代码,并使用 Google AutoService 在 META-INF/services 文件夹下生成服务文件,现在我想升级它以使用Java9模块描述(module-info)放服务定义,但我失败了,见下面的代码:

编译代码,下面会抛出异常:

如果我使用builderContext.getFiler().createResource(StandardLocation.SOURCE_OUTPUT, "", MODULE_FILE_NAME)生成模块信息文件,可以创建该文件,但似乎 javac 不编译它。

我检查了 Filer 接口的 javadoc,它说:

文件创建方法采用可变数量的参数,以允许将原始元素作为提示提供给工具基础架构,以更好地管理依赖关系。原始元素是导致注释处理器尝试创建新文件的类型或包(表示包信息文件)或模块(表示模块信息文件)。

但是createSourceFilecreateClassFile似乎都只支持 java 类型和包(package-info):

创建一个新的源文件并返回一个对象以允许对其进行写入。可以创建类型或包的源文件。

那么如何在编译时生成模块信息文件呢?或者我必须在编译时使用像 ASM 这样的字节码工具来生成 module-info.class 文件?

0 投票
1 回答
320 浏览

java - 即使它在那里也找不到模块

我在运行我的 Java 应用程序时遇到了一个小问题(当我通过 Maven 运行它时它运行良好)。我得到错误:

该模块在我的src文件夹中,我的文件夹结构如下:

对于module-info.java->src/module-info.java

我的课src/main/java/frogger/game/MainMenu.java

奇怪的是,当我在module-info.java文件中写出模块的名称时,它又开始工作了,但在运行几次后就中断了。

编辑:

但是,更改module-info位置以src/main/java解决问题,它会破坏我的 Maven 安装命令并引发以下错误:

0 投票
1 回答
235 浏览

java - Java 11 模块信息和注释处理器

我们如何为注释处理器提供 Java 11 模块?

要注册注解提供者,我们需要以下模块信息条目:

现在,不幸的是,这还不够,因为 packages javax.annotation.processingjavax.lang.model.*并且javax.tools不在java.base模块中,而是在java.compiler模块中。

在 Java SE 8 中,一切都在 JRE 中可用,但在 Java 11 中,我们可以选择只使用一个子集。jlink然后我们可以创建更小的运行时映像。

现在,当然,我可以将以下内容添加到模块信息中:

但这也会导致java.compiler成为自定义运行时映像的一部分。

但是注解处理有些特殊:它是在编译时运行的代码,而不是在运行时。因此,它不应该是运行时映像的一部分。它应该只是一个编译时要求/依赖项。

有没有办法用 Java 11 模块系统解决这个问题?

0 投票
0 回答
714 浏览

java - 提供范围的 Java 11 模块信息和 Maven 依赖项

在使用一些 API 规范时,尤其是使用 Java EE/Jakarta EE API,例如 JPA,直到 Java SE 8,库添加具有范围的依赖项是 Maven 最佳实践provided

一方面,这会导致更小的 WAR-/EAR-文件,因为应用程序服务器已经提供了 API 类。

但在其他用例中,例如 Spring Boot 应用程序,这是最佳实践,因为 API 类在各种 JAR 中可用(例如也在 javaee-api 中)并且通常取决于实现提供者。

当我们将 requries 语句添加到模块信息时,例如:

这将需要一个特定的模块,而不是一个包(与Import-PackageOSGi 不同)。并且不应该由多个模块提供同一个包,AFAIK(没有拆分包)。

那么providedMaven的范围还有用吗?我们应该如何处理这些情况?

好的,我来宾它仍然可以用于减少 WAR-/EAR-文件的大小,但前提是应用程序服务器包含完全相同的模块。

我想在模块化世界中,将来只有一个 API 类模块,对吗(这可能不是一件坏事)?

java-ee/jakarta-ee 模块将使用requries transitive语句而不是包含类本身?

0 投票
1 回答
179 浏览

java - 模块信息 javadoc:@moduleGraph

JDK 11 模块的 module-info 的 javadoc 使用 tag @moduleGraph

我想这是生成模块图的原因:https ://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/module-summary.html

这是非标准标签吗?我在这个标签上找不到任何文档,而且当我添加它时它也不起作用。

有没有办法生成这个图?

0 投票
1 回答
100 浏览

java - 如何在 Project Jigsaw 中合并两个导出相同包的自动模块?

Project Jigsaw 的概念指南介绍了“在导出相同包的两个自动模块之间架起一座桥梁”。1

其实目前有两个自动模块grpc.apigrpc.context导出io.grpc包,据其github报道。2

这座似乎是将 Jigsaw 应用于具有这些库的项目的确切解决方案,但文档没有提供任何具体的实现方式。

javac为此目的是否有任何命令选项?或者,有没有推荐的方法来克服这种情况?

谢谢!

0 投票
2 回答
3211 浏览

java - Java 11:目标org.apache.maven.plugins的执行默认编译:maven-compiler-plugin:3.8.0:编译失败。:NullPointerException

我正在将我的项目从 java 8 升级到 java 11。我能够使用 java11、spring 5 依赖项构建和部署它,但是当我将 module-info.java 添加到我的项目中时,我在构建时遇到以下错误:

我在我的 pom 文件中添加了 maven-compiler-plugin 如下:

如果我做错了什么,请指导我。