簡體   English   中英

package org.w3c.dom 可以從多個模塊訪問:<unnamed> , java.xml</unnamed>

[英]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。一些庫問題。 易於修復。 但在這一點上,

  • 我試圖創建 module-info.java → 最糟糕。
  • 在我的操作系統 (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.parsersorg.w3c.dom )。

我不得不刪除dom4j來解決這個問題。 只需使用 JDK 自己的 XML api。

對於 Java 9 及更高版本,從類路徑中刪除 org.w3c.dom jar 文件,您就完成了。 順便刪除模塊信息文件。 您不需要添加外部 jar 文件,它已經包含在 java 9 及更高版本的系統庫中。

只需打開配置構建路徑並驗證您作為項目一部分添加的所有模塊,其中包含類文件 *

org.w3c.dom

這個錯誤,我們通常在Java中由於在一個項目中添加了相同類型的多個API包而出現。

因為,我使用的版本與您提到的相同,所以沒有遇到任何問題,所以請確保您沒有任何重復的模塊。

就我而言,我使用的是:
JDK 14xmlbeans.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.htmlunitxom都請求了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

我們設法像這樣修復它:

  • 在 IDE 搜索類開頭:org.w3c
  • 添加 pom.xml 排除項或增加庫版本,因為 org.w3c 在一些較新的庫版本中已被刪除
  • 在 IDE 和命令行中測試編譯

如果問題仍然存在:

  • 將所有依賴項導出到文件: mvn dependency:copy-dependencies -DincludeScope=test -DoutputDirectory=deps
  • 從 jar 文件中找到 org.w3c 的任何類
  • 繼續調整pom.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM