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

pet*_*erp 8 maven java-platform-module-system maven-compiler-plugin java-9

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

  • org.elasticsearch:elasticsearch
  • org.elasticsearch.module:郎常规

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

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

对于描述符中的每个必需模块,其中x是每个模块的名称.

我假设一个较新的elasticsearch版本将在Java 9最终版本的时候取消拆分包,但是通常有一种方法来处理遗留依赖项中的拆分包吗?

我希望能够在类路径而不是模块路径上有那些,但是在邮件列表上阅读这个对话后,似乎没有办法告诉Maven编译器这样做.


maven 3.3.9 - maven-compiler-plugin 3.6.0 - jdk9-ea + 149 - elasticsearch 2.3.3

pet*_*erp 3

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

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

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