使用 Maven 构建具有非模块化依赖项的 JDK 9 项目需要什么
我有一个简单的Java 9 SE项目,其中一个依赖于非模块化项目(在本例中选择Weld SE),我正在尝试使用Maven()构建它。为了让Java 9发挥作用,我添加了.最初,此文件仅包含模块名称,没有公式。clean install
module-info.java
requires
请记住,我唯一的依赖项不是模块化项目,因此我认为Maven将放入类路径(不是模块路径),因此它将最终进入模块化系统状态中所述。unnamed module
现在,我的Maven版本是3.3.9,我知道我需要在3.6版本中使用Maven编译器插件,如这里所述,当然我已经下载了带有拼图的JDK 9 EA构建,并将Maven设置为使用它。
如果我在没有 的情况下构建我的项目,一切都可以正常工作,将内容添加到类路径中并生成成功。我想Maven只是坚持旧的方式,只要你省略那个文件。module-info.java
但是,构建它告诉我,在类路径上找不到来自依赖项的类。所以我在调试模式下运行了Maven(使用-X),实际上 - 所有jar都在模块路径下,类路径是空的。这实际上意味着我的所有依赖项都转移到自动模块中,我需要在 中声明它们。module-info.java
module-info.java
一旦我声明了自动模块需求(链接到项目),我就能够在JDK 9上构建它。但它有点混乱 - 我唯一的依赖是,但我要求我声明更多的编译要求才能通过。module-info
pom.xml
weld-se-core
module-info
这是一个完整的GitHub项目,可以观察到所有这些。
所以我的问题是:
- 如果我知道一些工件不是模块化的,我能告诉Maven在类路径上放置它们吗?这样我就可以避免
自动模块
和需要声明它们吗? - 如果我坚持使用
自动模块
,我能告诉Maven以某种方式传递允许我的依赖关系需要引入的任何东西吗?例如,Weld的其他部分,CDI API等。 - 为什么我需要声明我的项目
需要
模块,我不直接使用模块的实际原因是什么?例如weld.environment.common