如何处理自动模块中的拆分包?

Posted

技术标签:

【中文标题】如何处理自动模块中的拆分包?【英文标题】:How can I handle split packages in automatic modules? 【发布时间】:2017-05-14 02:31:16 【问题描述】:

我目前正在测试将现有应用程序迁移到 Jigsaw 模块。我的一个模块使用 ElasticSearch 及其 Groovy 插件。

org.elasticsearch:elasticsearch org.elasticsearch.module:lang-groovy

不幸的是,他们共享一个拆分包,所以mvn install 给了我:

x 从 lang.groovy 和 elasticsearch 读取包 org.elasticsearch.script.groovy

描述符中的每个必需模块一次,其中 x 是每个模块的名称。

我假设在 Java 9 最终版本之前,较新的 elasticsearch 版本将消除拆分包,但是通常有一种方法可以处理遗留依赖项中的拆分包吗?

我希望能够将它们放在类路径而不是模块路径上,但在阅读this conversation on the mailing list 之后似乎没有办法告诉 Maven 编译器这样做。


maven 3.3.9 - maven-compiler-plugin 3.6.0 - jdk9-ea+149 - 弹性搜索 2.3.3

【问题讨论】:

【参考方案1】:

经过更多测试,我认为有一些选项可以解决许多(但绝对不是全部)第 3 方拆分包情况。

    清理依赖项 - 可能实际上并不需要依赖项,或者可以将其替换为更新的(或更独特的)JAR 将您自己的模块重组为两个模块,每个模块都从两个第 3 方模块之一读取包(如果可能/合理) 将第 3 方模块之一(或两者)包装在一个简单模块中,该模块仅显式导出您的模块实际需要的包。

根据具体情况,这些选项之一可能非常适合解决拆分包问题。但是它们都不能处理连贯的代码实际上需要从拆分包的两个部分访问类的情况。

【讨论】:

以上是关于如何处理自动模块中的拆分包?的主要内容,如果未能解决你的问题,请参考以下文章

你如何处理 UI 自动化 iPhone 应用程序测试中的 UIPickerView?

从 MySQL 中的现有表生成更改日志时,liquibase 如何处理自动递增的 PK?

在 Objective-C 中如何处理 Autorelease 池中的对象?

Git 如何处理二进制文件?

接口自动化如何处理 Form 请求?

如何处理自动续订重新订阅?