问题标签 [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 回答
59 浏览

java - 模块描述符文件允许导入语句 为什么?

请任何人解释我模块描述符文件允许导入为什么?
模块描述符文件中使用的import语句是什么。

0 投票
1 回答
64 浏览

classpath - com.faizan.org 包可从多个模块访问:在 Eclipse 2019-12 构建期间使用 JDK 9+ 的 ProjectA、ProjectB

我有 2 个项目,比如 ProjectA 和 ProjectB,都包含包 com.faizan.org。ProjectA 被添加到 ProjectB 的模块路径中。

现在我正在 ProjectB 中编写一个新类,该类需要从 ProjectA 的 com.faizan.org 导入一个类,但出现错误 The package com.faizan.org is access to more module: ProjectA, ProjectB in eclipse 2019 -12 使用 openJdk 12 并且编译器合规性也设置为 12。

如何在没有类路径冲突的情况下将包含相同包名的外部项目添加到另一个项目?此外,在某些情况下无法访问超类的方法。

0 投票
1 回答
913 浏览

java - Java 11 模块信息:如何注册注解处理器

要在 Java 11 中注册服务提供者,可以使用以下“提供”模块信息条目:

但是,对于注释处理器,这似乎不起作用。(注解处理器的特殊之处在于它是编译器应该在编译期间获取实现,而不是在运行时获取应用程序。)

为了测试这一点,我在GitHub 上创建了一些SSCCE

有2个模块:

  • java11-sample-annotation-processor: 提供@Foo注解和FooApplicationProcessor
  • java11-sample-lib: 提供 2 个示例类,均使用@Foo注解

预期输出:java11-sample-libJAR 中应该有一个foo.txt文件

主分支中的版本是有效的:

  • 爪哇 11
  • module-info用过
  • 注释处理器注册src/main/resources/META-INF/services/javax.annotation.processing.Processor

在以下版本中,foo.txt不会生成该文件:

registration-in-module-info 分支中,我已将2 个库更改为带有module-info 的Java 11 模块。注释处理器在这里注册在模块信息中:

registration-in-module-info-moduleAndPkg 分支稍有变化我指定了目标模块和目标包(硬编码)而不是根包。

registration-meta-inf分支中仍然有一个module-info,但是注解处理器注册在src/main/resources/META-INF/services/javax.annotation.processing.Processor而不是在module-info中(如果编译器不能在module-info中使用provides语句!?)

唯一一个模块分支中,我已经从另一个模块中删除了模块信息java11-sample-annotation-processor。注释处理器注册在src/main/resources/META-INF/services/javax.annotation.processing.Processor.

所以我的问题是:在使用 Java 11 模块时如何配置注释处理器?

0 投票
2 回答
211 浏览

java - 模块目录或模块文件内部名称应相同或不同

目录结构

成功编译生成out/calc-module目录。


模块信息.java


计算器.java

当我在以下命令中编译此模块时。
1. java -p out --add-modules calc-module com.ngsharma.ocp.Calculator 当我使用这个命令时,它抛出异常FindException : Module calc-module not found。
根据1.模块内部名称和模块目录名称应该相同,其他抛出FindException。
2 java -p out --add-modules calc com.ngsharma.ocp.Calculator
但在这种情况下,我没有使用模块目录名,我只在文件名中使用了module-info.java,并成功运行。如何..?为什么..?
模块文件名和模块文件夹名称应该相同,否则无法编译和运行它是否正确。请任何人建议我并纠正我的错误。(模块中的新手)。

0 投票
1 回答
567 浏览

java - Java 11. javac/ 警告:[options] 模块名称在 --add-reads 选项未找到:moduleB

我有一个小的 java 11 模块项目,它由两个模块 moduleA 和 modules 组成。

模块B MyService.java

模块信息.java

模块A module-info.java

主.java

我想运行这个项目。我用这个命令编译moduleB

然后我想编译moduleA,

但我遇到了这个问题:

如何使用 --add-export 和 --add-reads 选项编译 moduleA?

0 投票
1 回答
194 浏览

java - Java:即使模块信息打开了必要的包,springrframework.beans 也无法访问

我有一个warehouse.controller要尝试的包import org.springframework.beans.factory.annotation.Autowired;,但出现错误: The import org.springframework.beans.factory.annotation.Autowired cannot be resolvedJava

到目前为止,我的module-info.java样子是这样的:

pom.xml由这些依赖项组成:

对于如何解决所描述的错误的任何建议,我将很高兴。

0 投票
1 回答
421 浏览

java - 对于其他非模块化项目,如何使 Java 类在其模块之外不可见?

最近我发现,如果模块内的包包含公共接口或类,它们会自动导出,因此在接收者代码未模块化时无意中在模块外部可见。

项目结构如下


模块信息.java

牛仔.java

主.java

包中的类my.project.first应该my.donor只在模块中使用,并且在模块之外是不可见的。

没想到它在模块外可见,好像有一行,所以可以编译exports my.project.first;该类。Main

限制可见性的方法是制作sub-recipient一个 java 模块,添加module-info.java,然后其中的所有内容都sub-donor按预期隐藏。当然,对于任何其他非模块化项目,my.donor模块中的每个公共类都是可见的。

请在 GitHub 上查看一个最小的工作示例。

我很好奇这是一个错误还是一个有意识的设计。这种方法的目的是什么?

0 投票
0 回答
361 浏览

java - 从 java.xml.soap 和 java.xml.soap 读取包 javax.xml.soap

几年来我的第一个 Java 项目。我在 java 11 上,我的小项目是一个用 maven 编译的模块。

我收到此错误: mymodule reads package javax.xml.soap from both java.xml.soap and java.xml.soap

(我必须使用 SOAP 的原因是历史性的)

问题是java.xml.soap我没有出现,mvn dependency:tree所以我不知道要排除什么。

非常感谢任何提示

和依赖项:

0 投票
1 回答
572 浏览

java - 使用 Java 13 使用 Tika 编译应用程序 - 加载模块时出现问题

我正在尝试将使用 Tika 的 Java 应用程序从 OracleJDK 1.8 迁移到 OPenJDK 13。

我的 IDE 是 Eclipse。

我创建了该文件module-info.java以指示我的应用程序所需的模块。

为了能够使用 , 等 Tika 类AbstractParserDetectorrequires org.apache.tika.core;module-info.java.

我的代码还使用该类org.apache.tika.parser.pdf.PDFParserConfig来提取嵌入的图像:

我得到编译错误:

Eclipse 建议添加requires org.apache.tika.parsers;module-info.javaEclipse 建议截图

当我将此模块要求添加到module-info.java时,应用程序会正确编译。

也就是说,在这个阶段我们已经包含在module-info.java

但是,当尝试执行编译后的应用程序时,我们会收到错误消息:

在 Eclipse 中检查项目库,我可以看到 tika-core 和 tika-parsers (v1.24) 都是模块化的:Eclipse Java Build Path

总之:如果我不添加org.apache.tika.parsers为必需模块,应用程序将无法编译,如果我添加它,我会收到运行时错误org.apache.tika.parser.onenote.OneNoteParser,说不在模块中。

我检查了这些包的 JAR 文件以查看它们的依赖关系。核心包似乎是正确的:

...但是“解析器”jar 给出了一个错误:

这是否意味着解析器的 jar 包格式不正确?有什么解决方法吗?

谢谢你。

编辑: 如果我尝试使用版本 1.24.1,我会收到执行错误:

那就是:失败的班级是CompositeExternalParser而不是OneNoreParser

检查META-INF/services/org.apache.tika.parser.Parsertika-parsers-1.42.1.jar I can see the entryorg.apache.tika.parser.external.CompositeExternalParser` 但包不包含此类。

所以,这似乎是这个 META-INF 文件中的错误。这是因为编译包并将其提交到 Maven Central 时出现错误吗?

我发现了一个 JIRA 问题TIKA-2929,他们说“Apache Tika 需要位于 Java 类路径上,而不是模块路径上”。我已经尝试过了,但是,如前所述,如果我不将它添加到模块路径并设置requires org.apache.tika.parsers;.

这是一个很难的谜题...

0 投票
1 回答
997 浏览

java - 发生此错误时 Error:(1, 1) java: module JavaFX 从 java.desktop 和 java.datatransfer 读取包 java.awt

项目名称

-JavaFX module-info.java

控制器.java

我得到的错误:错误:(1、1)java:模块JavaFX从java.desktop和java.datatransfer读取包java.awt
如何解决这个问题?