[英]Specific question concerning "The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml"
[英]The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml
我無法將org.w3c.dom.NodeList
package 導入 Eclipse。 它正在顯示
package org.w3c.dom 可從多個模塊訪問:
<unnamed>
, java.xml" Z6B7B655DD22FAA3F10677C512493A8A 中的錯誤消息
請讓我知道如何解決這個問題?
Eclipse 版本:
Eclipse IDE 適用於企業 Java 開發人員。
版本:2019-06 (4.12.0)
版本號:20190614-1200
Java版本:
java 版本“12.0.1” 2019-04-16
Java(TM) SE 運行時環境 (build 12.0.1+12)
Java HotSpot(TM) 64位服務器虛擬機(build 12.0.1+12,混合模式,共享)
由於可傳遞的xml-apis
依賴關系,我遇到了類似的問題。 我使用 Maven 排除解決了它:
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>0.95</version>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>
另一個只會引起麻煩的依賴項,除了刪除它之外我沒有其他解決方案是這個:
<dependency>
<groupId>com.oracle.database.xml</groupId>
<artifactId>xmlparserv2</artifactId>
<version>${oracle.version}</version>
</dependency>
使用mvn dependency:tree
查看誰引入了傳遞依賴,然后從那里排除。
令人失望的是,我沒有看到任何編譯器標志來顯示問題是什么 jar 甚至 -Xlint:module 似乎沒有顯示任何有用的東西,而且 eclipse 也沒有說明這個問題
而不是找到 org.w3c.dom 從哪里來,我一直在使用這個腳本:
mvn dependency:copy-dependencies -DincludeScope=test -DoutputDirectory=deps
for i in deps/*.jar; do if unzip -l $i| grep -q org.w3c.dom; then echo $i; fi ; done
嚴格地說,您不必指定范圍測試,因為這是默認設置,但我已將其包含在內,因為您可能想改用compile
在我這邊,我花了幾個小時來了解我的問題,對這個問題真的很接近。
The package org.w3c.dom is accessible from more than one module: <unnamed>, java.xml
我想將一個項目從 Java 8 遷移到 Java 11。一些庫問題。 易於修復。 但在這一點上,
在我的操作系統 (debian 10) 上發現問題 → 即使 Java 11 是默認的 JRE,$JAVA_HOME 也沒有正確設置為 maven 構建。 而當我認為這只是一個 Eclipse 問題時,我最終認為這是一個全局編譯問題。 為了解決這個問題,我必須在~/.mavenrc
添加以下行
JAVA_HOME=/usr/lib/jvm/default-java
對 maven 依賴項的深入分析顯示我對xom .jar 的第三級依賴項觸發了該問題。 依賴被鏈接到Saxon HE庫 → 升級到版本 9.9.X解決了這個無聊的問題。
希望這會幫助其他人。
在我的情況下,它是由組合使用引起的:
JDK 11
dom4j 2.1.3
庫正如其他人指出的那樣,根本原因是dom4j
及其依賴項(例如, pull-parser
)使用了一些 JDK 使用的包名稱( javax.xml.parsers
、 org.w3c.dom
)。
我不得不刪除dom4j
來解決這個問題。 只需使用 JDK 自己的 XML api。
對於 Java 9 及更高版本,從類路徑中刪除 org.w3c.dom jar 文件,您就完成了。 順便刪除模塊信息文件。 您不需要添加外部 jar 文件,它已經包含在 java 9 及更高版本的系統庫中。
只需打開配置構建路徑並驗證您作為項目一部分添加的所有模塊,其中包含類文件 *
org.w3c.dom
這個錯誤,我們通常在Java中由於在一個項目中添加了相同類型的多個API包而出現。
因為,我使用的版本與您提到的相同,所以沒有遇到任何問題,所以請確保您沒有任何重復的模塊。
就我而言,我使用的是:
JDK 14
和xmlbeans.jar
庫。
我只需要刪除xmlbeans.jar
庫,它肯定解決了這個問題。
org.w3c.dom用於:
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.4.0</version>
</dependency>
檢查這是否是通過其他一些依賴項傳遞導入的。 排除相同
添加依賴項:
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
我無法將org.w3c.dom.NodeList
包導入 Eclipse。 它正在顯示
包 org.w3c.dom 可以從多個模塊訪問:
<unnamed>
, java.xml" eclipse 中的錯誤消息。
請讓我知道如何解決這個問題?
日蝕版:
面向企業 Java 開發人員的 Eclipse IDE。
版本:2019-06 (4.12.0)
版本號:20190614-1200
爪哇版:
java版本“12.0.1” 2019-04-16
Java(TM) SE 運行時環境(構建 12.0.1+12)
Java HotSpot(TM) 64 位服務器 VM(構建 12.0.1+12,混合模式,共享)
如果您在一個簡單的Java 項目中,而不是 Maven。 然后只需從庫中刪除 dom-jaxb jar 。
步驟:右鍵單擊項目 -> 屬性 -> Java BuildPath -> 庫選項卡 -> 選擇 jars,例如 dom-2.3.0-jaxb-1.0.6(版本可能不同)-> 刪除。
現在它將構建而不會出錯。
發生錯誤是因為“org.w3c.dom.Document”來自已刪除的“dom-2.3.0-jaxb-1.0.6”jar 和 Java 的內置庫。 刪除額外的 jar 將讓它只來自 Java 的內置庫。
您需要手動檢查並刪除所有可能與java.xml
包沖突的 jar(庫)。
就我而言,我編輯了.classpath
文件並刪除了以下 jars 並解決了問題:
jtidy.jar, castor-0.9.5.4-xml.jar, xercesImpl.jar, xml-apis.jar
就我而言,罪魁禍首是 Apache POI 庫。 添加排除如下
<!-- Apache POI Library for Parsing Excel Sheets -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
</exclusion>
</exclusions>
</dependency>
您可以使用此代碼(例如在單元測試中)確定所有包含 class 的 JARs:
getClass().getClassLoader().getResources("org/w3c/dom/NodeList.class");
這給了你一個Enumeration
。 最簡單的打印方法是:
Collections.list(e).forEach(System.out::println);
在 Gradle 土地中,您可以通過運行以下命令來跟蹤哪些依賴項對xml-api
有貢獻:
gradlew -q dependencies
(或核心:多項目環境中core
項目的core:dependencies
項)。
就我而言, net.sourceforge.htmlunit
和xom
都請求了xml-apis
,因此解決方案是在您的build.gradle
中排除xml-apis
:
dependencies {
implementation("net.sourceforge.htmlunit:neko-htmlunit:$nekoHtmlUnitVersion") {
exclude group: "xml-apis"
}
testImplementation("xom:xom:$xomVersion") {
exclude group: "xml-apis"
}
// ...other dependencies
}
有時即使您刪除了重復的類,同樣的錯誤“package org.w3c.dom可以從多個模塊訪問”可能仍然存在,尤其是對於 IDE。
只找到 org.w3c.dom 並不總是足夠的..,。 您可能需要刪除共享相同父 package org.w3c.xxx 的重復類,例如 org.w3c.css
我們設法像這樣修復它:
如果問題仍然存在:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.