当前位置: 首页 > 面试题库 >

Java 9未命名模块在调试时(通过IntelliJ)从两者中读取软件包[X]

霍建柏
2023-03-14
问题内容

在我的项目中,我有一个使用多个第三方库的程序包。让我们看一下依赖树:

[INFO] +- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- org.apache.directory.studio:org.apache.commons.collections:jar:3.2.1:compile
[INFO] |  \- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] +- xerces:xercesImpl:jar:2.11.0:compile
[INFO] |  \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] +- org.apache.cxf:cxf-rt-bindings-soap:jar:3.2.2:compile
[INFO] |  +- org.apache.cxf:cxf-core:jar:3.2.2:compile
[INFO] |  |  +- com.fasterxml.woodstox:woodstox-core:jar:5.0.3:compile
[INFO] |  |  |  \- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile
[INFO] |  |  \- org.apache.ws.xmlschema:xmlschema-core:jar:2.2.3:compile
[INFO] |  +- org.apache.cxf:cxf-rt-wsdl:jar:3.2.2:compile
[INFO] |  |  +- wsdl4j:wsdl4j:jar:1.6.3:compile
[INFO] |  |  \- org.ow2.asm:asm:jar:5.2:compile
[INFO] |  \- org.apache.cxf:cxf-rt-databinding-jaxb:jar:3.2.2:compile
[INFO] +- org.apache.wss4j:wss4j-ws-security-common:jar:2.2.1:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.22:compile
[INFO] |  +- org.apache.santuario:xmlsec:jar:2.1.1:compile
[INFO] |  |  \- commons-codec:commons-codec:jar:1.10:compile
[INFO] |  +- org.opensaml:opensaml-saml-impl:jar:3.3.0:compile
[INFO] |  |  +- org.opensaml:opensaml-profile-api:jar:3.3.0:compile
[INFO] |  |  |  \- org.opensaml:opensaml-core:jar:3.3.0:compile
[INFO] |  |  |     \- io.dropwizard.metrics:metrics-core:jar:3.1.2:compile
[INFO] |  |  +- org.opensaml:opensaml-saml-api:jar:3.3.0:compile
[INFO] |  |  |  +- org.opensaml:opensaml-xmlsec-api:jar:3.3.0:compile
[INFO] |  |  |  \- org.opensaml:opensaml-soap-api:jar:3.3.0:compile
[INFO] |  |  +- org.opensaml:opensaml-security-impl:jar:3.3.0:compile
[INFO] |  |  |  \- org.opensaml:opensaml-security-api:jar:3.3.0:compile
[INFO] |  |  |     +- org.cryptacular:cryptacular:jar:1.1.1:compile
[INFO] |  |  |     \- org.bouncycastle:bcprov-jdk15on:jar:1.55:compile
[INFO] |  |  +- org.opensaml:opensaml-xmlsec-impl:jar:3.3.0:compile
[INFO] |  |  \- net.shibboleth.utilities:java-support:jar:7.3.0:compile
[INFO] |  |     +- com.google.guava:guava:jar:19.0:compile
[INFO] |  |     \- joda-time:joda-time:jar:2.7:compile
[INFO] |  +- org.opensaml:opensaml-xacml-impl:jar:3.3.0:compile
[INFO] |  |  \- org.opensaml:opensaml-xacml-api:jar:3.3.0:compile
[INFO] |  +- org.opensaml:opensaml-xacml-saml-impl:jar:3.3.0:compile
[INFO] |  |  \- org.opensaml:opensaml-xacml-saml-api:jar:3.3.0:compile
[INFO] |  +- org.jasypt:jasypt:jar:1.9.2:compile
[INFO] |  \- org.apache.geronimo.javamail:geronimo-javamail_1.4_mail:jar:1.8.4:compile
[INFO] +- org.apache.wss4j:wss4j-ws-security-dom:jar:2.2.1:compile
[INFO] |  \- net.sf.ehcache:ehcache:jar:2.10.4:runtime
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.22:compile
[INFO] +- log4j:log4j:jar:1.2.17:compile
[INFO] \- org.testng:testng:jar:6.11:test
[INFO]    +- com.beust:jcommander:jar:1.64:test
[INFO]    \- org.yaml:snakeyaml:jar:1.17:test

到目前为止,编译和运行正常。

但是,当我开始使用IntelliJ进行调试时,我得到了100多个错误的列表,例如:

Error:java: the unnamed module reads package org.opensaml.saml.config from both opensaml.saml.api and opensaml.saml.impl
Error:java: the unnamed module reads package javax.xml.datatype from both xml.apis and java.xml
Error:java: the unnamed module reads package javax.xml.transform.dom from both xml.apis and java.xml
....

由于新的Java 9模块限制,这似乎是一个错误。但是如何处理呢?

org.opensaml都是wss4j-ws-security-common
2.2.1的一部分(这是最新版本,于2018年1月发布)。opensaml.saml.api和opensaml.saml.impl是3.3.0版,并且都使用相同版本的org.opensaml.saml.config。所以???

以及为什么“ mvn编译”通过了,但是用IntelliJ调试却失败了?


问题答案:

我在Java 9 IntelliJ项目中也有100多个相同的“ 错误:未命名的模块也从xml.apis和java.xml读取包javax.xml ”。

除非我在IntelliJ中尝试运行单元测试时都会得到它们。从命令行使用maven进行一切构建和测试时,一切工作正常。就像你一样。

我能够使我的错误消失…

1 )从多模块项目的顶级pom中删除以下内容…

<dependency>
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
</dependency>  
...
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>${javaee.api.version}</version>
    <scope>provided</scope>
</dependency>

2 )在IntelliJ的项目导航器中右键单击顶级pom,然后选择“ Maven-Reimport

3 )从IntelliJ菜单中执行“ 构建- >构建模块[myModule] ”。

只需找出哪些Maven工件包含您的100多个“ ERROR” 消息中列出的软件包即可。然后将其注释掉。重新导入。然后从菜单中选择“ Build
module
”。无论如何,这对我有用。

我从pom中删除的工件是从另一个用作模板的项目中推测性复制/粘贴到那里的。但幸运的是,我不需要任何一个。



 类似资料:
  • 我得到3个不同的错误。 无法确定模块名称... 未命名模块读取包... 模块org.reactivestreams读取包从两个... 这些错误到底是什么? 建筑格拉德尔 错误消息: 编译Java 错误:无法确定/Users/srihariprasad/的模块名称。gradle/caches/modules-2/files-2.1/io。github。resilience4j/resilience4

  • 这是 module-info.java文件 不幸的是,当我构建这个项目时,弹出了几个错误,您可以在这里看到:errors null

  • 我试图使用java 9和gradle的Spring启动。我无法运行我的简单代码,我得到下面提到的错误:- 我的依赖文件和module-info.java文件非常简单。 有人能帮忙吗?? 谢谢 阿马尔

  • 我试图了解JPMS是如何工作的。 从这里开始 类路径还没有完全消失。类路径上的所有JAR(模块化或非模块化)和类都将包含在未命名的模块中。与自动模块类似,它导出所有包并读取所有其他模块。但很明显,它没有名字。因此,它不能被指定的应用程序模块所要求和读取。未命名的模块可以依次访问所有其他模块。 请注意。。。在类路径上,将包含在未命名模块中。模块为单数。 从这里开始 为了兼容性,类路径上的所有代码都打

  • 我正在使用Intellij Idea-2021.3.2和Java8。在Intellij中,我无法读取同一模块中另一个包中的文件。该文件位于main而不是资源文件夹下。但在Eclipse中,我可以读取。 例如。下面的代码在 eclipse 和 intellij 中打印不同的输出。 在Intellij中,代码打印“资源为空”,但在eclipse中,代码打印“资源已找到!!”。 在intellij中是否

  • 问题内容: 我知道这个问题已经被问过多次了。我已经阅读了所有内容,但无法解决问题。以下是我的目录结构。 在main.py中,我将导入以下内容。 当我在Windows中执行代码时,它工作得很好。但是在Linux中,出现以下错误。 我还阅读了有关模块和包的官方python文档。 问题答案: 您的包裹结构还可以。您的导入声明很好。唯一缺少的是该软件包在中是可见的,该位置是可以解析import语句的位置列