考虑到我的模块-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;
如何解决这个拆分包问题?
发布于 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中阴影化依赖项。
https://stackoverflow.com/questions/57607637
复制相似问题