包括一些最近的更新,我会 尽力 回答。
更新
Java 9已于2017年9月21日公开发布。
该最低兼容版本的
maven-compiler-plugin
在今天的日期3.7.0
。
@Tunaki已经分享了如何配置它以构建JDK 1.5至8和JDK 9的兼容版本。
从问题和注释中假设,您已经知道自动模块,并将所有模块依赖项放在模块路径上。
如果我知道一些构件不是模块化的,我可以告诉Maven将它们放在classpath上吗?这样我就可以避免自动模块,而无需声明它们?
对于在maven pom中指定的工件
<dependencies>以及
module-info.java当前模块中未包括的工件,最终都将其留下,以
未命名模块的 形式从类路径中进行访问
。
如果我坚持使用自动模块,是否可以告诉Maven以某种方式可传递地允许我的依赖项需要引入的任何内容?例如Weld,CDI API等的其他部分。
不 ,因为自动模块不包含显式声明的
module-info.java,所以没有这种方法可以定义 _
requirestransitive_ 当前模块可能需要的任何传递依赖。
从我的一个过去的经验,如在详细Maven的任何传递依赖
dependency:tree的是需要在该模块编译时就必须使用被明确定义
requires在
module-info当前项目中。
为什么我要声明我的项目需要模块而不是直接使用的实际原因是什么?例如,weld.environment.common **
您不需要
requires
为模块指定在编译或运行时不需要的模块。如果项目在运行时不需要某个依赖关系,而在编译时需要一个依赖关系,则需要确保 _
requires static
_ 在声明中使用定义此类模块。



