java 9 unnamed module reads package [X] from both … while debugging (with IntelliJ)

主宰稳场 提交于 2019-12-22 08:10:13

问题


In my project I have a package that uses several 3rd party libraries. Let's have a look at the dependency tree:

[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

Compiling and running works fine so far.

But when I what to start debugging with IntelliJ, I get a list of over 100 errors like:

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
....

This seems to be an error due to the new Java 9 module restrictions. But how to deal with here?

Both org.opensaml are part of wss4j-ws-security-common 2.2.1 (this is the last version, released in January 2018). opensaml.saml.api and opensaml.saml.impl are version 3.3.0 and both use org.opensaml.saml.config of the same version. So???

And why does "mvn compile" pass, but debugging with IntelliJ fails?


回答1:


I had the same 100+ multititude of "ERROR: The unnamed module reads package javax.xml from both xml.apis and java.xml" in my Java 9 IntelliJ project too.

Except I would get them whenever I tried to run unit tests in IntelliJ. Everything worked perfectly building and testing with maven from the command line; just like you.

I was able to make my errors go away by...

1) Removing the following from the top-level pom of a multi-module project...

<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) Right clicking the top-level pom in IntelliJ's project navigator, then select "Maven - Reimport"

3) Doing "Build -> Build module [myModule]" from the IntelliJ menu.

Just work out which maven artifacts contain the packages listed in your 100+"ERROR" messages. Then comment them out. Reimport. Then "Build module" from the menu. That worked for me anyway.

The artifacts I removed from the pom were copy/pasted in there speculatively from another project I used as a template. But luckily I don't need any of them.




回答2:


This is a known IDEA bug. Please vote for https://youtrack.jetbrains.com/issue/IDEA-171320



来源:https://stackoverflow.com/questions/49445583/java-9-unnamed-module-reads-package-x-from-both-while-debugging-with-inte

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!