簡體   English   中英

Lucene 拆分包:模塊從“lucene.analyzers.common”和“lucene.core”中讀取包“org.apache.lucene.analysis.standard”

[英]Lucene split package: module reads package 'org.apache.lucene.analysis.standard' from both 'lucene.analyzers.common' and 'lucene.core'

鑒於我的module-info.java

module my_module {
    requires lucene.analyzers.common;
    requires lucene.core;
}

我收到以下錯誤:

模塊“my_module”從“lucene.analyzers.common”和“lucene.core”中讀取包“org.apache.lucene.analysis.standard”

在我的代碼中,我使用以下導入:

// import from lucene.analyzers.common
import org.apache.lucene.analysis.util.TokenizerFactory;
// import from lucene.core
import org.apache.lucene.analysis.TokenStream;

如何解決這個拆分包問題?

您可能已經知道,Lucene 不正確支持 Java 平台模塊系統,因此它沒有定義模塊並包含拆分包,這與模塊系統不能很好地配合使用。

但是,有一種變通方法允許在 JPMS 項目中使用 Lucene。 實現它的確切方法取決於您的特定構建環境,我不知道您的環境是如何設置的,但無論如何,任何構建環境的基本思想都是相同的。 Lucene 遷移指南提供了第一條線索(重點是我的):

如果您要將項目遷移到 Java 9 Jigsaw 模塊系統,請記住,Lucene 目前尚不支持服務提供者 impls(提供聲明)的 module-info.java 聲明。 因此,建議將所有 Lucene 保留在一個 Uber-Module 中,而不是嘗試將 Lucene 拆分為多個模塊。 一旦 Lucene 作為最低要求遷移到 Java 9,我們將致力於改進它。

將所有 Lucene 保留在單個模塊中(“Uber-Module”)意味着將所有 Lucene JAR 組合在一個 JAR 中,因此將自動模塊分配給該 uber JAR 的默認 Java 行為就可以正常工作,因為 uber JAR 包含合並的拆分包. 作為一種快速而骯臟的解決方案,您可以設置一個 shell 腳本,在構建之前將 Lucene JAR 合並為一個,但在構建過程中集成該步驟是一個更好的主意。

例如,要在 Maven 中執行此操作,您應該首先在 Maven 項目中創建一個 Maven 模塊,以便該模塊將您的 Maven 項目作為其父項。 完成后,必須配置所創建模塊的依賴項和 shade 插件,以便生成的 JAR 包含您使用的所有 Lucene 庫。 然后,您將該 Maven 模塊聲明為項目中的依賴項。 如需更詳細的說明和討論,請參見https://www.reddit.com/r/javahelp/comments/8v914c/using_nonmodule_library_lucene_in_java_10_project/https://lucene.472066.n3.nabble.com/Java-9-issues-td4348032 .html在 Maven 中着色依賴項

暫無
暫無

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

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