在Java9中,模块A和B将包some.package导出到模块C

在Java9中,模块A和B将包some.package导出到模块C,java,java-9,java-module,Java,Java 9,Java Module,我有三个模块:模块a、模块b和模块c。当我运行我的应用程序时,我得到以下信息: 启动层初始化期间出错 java.lang.module.ResolutionException:模块a和模块b 将包some.package导出到模块c 考虑到模块c没有导入some.package以及如何修复它,这意味着什么?看起来您已经创建了一个,这意味着两个模块(在您的案例中是模块a和模块b)包含相同的包(some.package)。模块系统不允许这样做。如果将两个模块都放在上,则无论是否导出包或第三个模块是否

我有三个模块:模块a、模块b和模块c。当我运行我的应用程序时,我得到以下信息:

启动层初始化期间出错 java.lang.module.ResolutionException:模块a和模块b 将包some.package导出到模块c


考虑到模块c没有导入
some.package
以及如何修复它,这意味着什么?

看起来您已经创建了一个,这意味着两个模块(在您的案例中是模块a和模块b)包含相同的包(
some.package
)。模块系统不允许这样做。如果将两个模块都放在上,则无论是否导出包或第三个模块是否依赖于其他两个模块,都会出现此错误


解决方法是,不要创建共享相同包的模块。这不仅是一个技术解决方案,它还通过确保每个模块都有一个特定且唯一的API来改进设计。

因此
module-a
module-b
导出相同的包
some.package
。而且,似乎不允许
module-c
同时要求
module-a
module-b
。很理论化,你不觉得吗?我认为这是设计失败。虽然
导出。。。到…
或使用不同版本可能会有所帮助。虽然可能与自动模块重复,但原因似乎与链接问题重复。似乎它阻止了从相同包但从不同JAR访问方法的包级访问。这种方式在库中非常流行,这种限制在Java9上打破了所有这些限制。它们在Java9上没有被打破,它们在类路径上工作得非常好。另一方面,要被视为模块,这些拆分必须被修复。所以我不能在模块路径上使用旧库,对吗?或者我可以同时使用模块路径和类路径吗?您可以并行使用模块路径和类路径(请参阅)。你可以把旧的lib放在模块路径上,只是不能保证它们在那里工作。我知道我不应该创建不共享同一个包的模块。但是,如果我使用外部库,而外部库可能也使用我使用的其他库,那么我如何才能跟上这一点呢?