首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lucene拆分包:模块从“lucene.analyzers.common”和“lucene.core”中读取包“lucene.analyzers.common”和“lucene.core”

Lucene拆分包:模块从“lucene.analyzers.common”和“lucene.core”中读取包“lucene.analyzers.common”和“lucene.core”
EN

Stack Overflow用户
提问于 2019-08-22 10:48:20
回答 1查看 685关注 0票数 4

考虑到我的模块-info.java

代码语言:javascript
运行
复制
module my_module {
    requires lucene.analyzers.common;
    requires lucene.core;
}

我得到以下错误:

模块“my_module”从“lucene.analyzers.common”和“lucene.core”中读取包“org.apache.lucene.analysis.standard”

在我的代码中,我使用以下导入:

代码语言:javascript
运行
复制
// import from lucene.analyzers.common
import org.apache.lucene.analysis.util.TokenizerFactory;
// import from lucene.core
import org.apache.lucene.analysis.TokenStream;

如何解决这个拆分包问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-08 17:06:59

正如您可能已经知道的,Lucene不支持Java Platform Module系统,因此它不定义模块并包含拆分包,这些包与模块系统不能很好地工作。

然而,有一个解决办法,允许在JPMS项目中使用Lucene。实现它的确切方法取决于您特定的构建环境,我不知道您的构建是如何设置的,但是基本思想对于任何构建环境都是一样的。Lucene迁移指南提供了第一条线索(强调地雷):

如果您要将您的项目迁移到Java 9 Jigsaw模块系统,请记住Lucene目前还不支持的模块-info.java声明(提供语句)。因此建议将Lucene全部保存在一个优步模块中,而不是试图将Lucene分成几个模块。一旦迁移到Java 9作为最低要求,我们将致力于改进这一点。

将所有Lucene保持在一个模块中(" uber - module ")意味着将所有Lucene JAR合并到一个JAR中,因此将一个自动模块分配给该uber JAR的默认Java行为只是起作用,因为uber JAR包含合并的拆分包。作为一个快速而肮脏的解决方案,您可以在构建之前设置一个shell脚本,将Lucene合并到一个中,但是在构建过程中集成这个步骤是一个更好的主意。

例如,要在Maven中这样做,首先应该在Maven项目中创建一个Maven模块,因此该模块将Maven项目作为其父项目。完成后,必须配置创建模块的依赖项和阴影插件,以便得到的JAR包含您使用的所有Lucene库。然后,将Maven模块声明为项目中的一个依赖项。有关更详细的说明和讨论,请参见项目/项目https://lists.apache.org/thread/ydrdwx63t80n7hsbz51467lp9z8w75tk在Maven中阴影化依赖项

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57607637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档