【问题标题】:Can Maven generate the module declaration?Maven可以生成模块声明吗?
【发布时间】:2017-08-29 08:16:33
【问题描述】:

module declaration 定义了模块的依赖关系等。如果我使用 Maven 作为构建工具,这是多余的,因为 pom.xml 已经包含这些(以及更多)信息。基于此,Maven不能为我生成module-info.java吗?

【问题讨论】:

  • 我不认为它可以,原因很简单:在单个依赖项中,我已经可以拥有多个 Java 模块(它们本身不是依赖项),那么 Maven 怎么可能拥有这些信息?
  • 模块声明不是多余的...... pom文件中的“exports ...”等价物是什么?此外,requires java.sql Maven 应该如何知道这一点?模块名称呢?应该根据什么来猜测?工件ID?不起作用....我建议阅读有关 Jigsaw 关键字的 Maven DEV 列表...除此之外,传递依赖项呢?
  • 反过来的问题也很有趣:Maven 是否可以读取 module-info.class,并下载正确的依赖项,而不需要在 pom 文件中声明依赖项?

标签: java maven java-9


【解决方案1】:

人们可能会期望大多数依赖项确实也是必需的模块。但是,需求也可以指向 JDK/JRE 的模块,这些模块在pom.xml 中没有指定。所以是的,如果你只看依赖关系,可能它们中的大多数都可以转换为所需的模块引用。

但是模块描述符包含更多信息,这些信息都基于开发人员做出的决定。 我已经写了an article 关于它,详细描述了为什么不能完全生成这个文件。

【讨论】:

  • 但它可能会生成某种默认或最小模块声明。所需的所有附加信息(开发人员做出的决定)都可以通过 pom(插件中的配置)提供。有了这个,pom 仍然是唯一需要维护的配置文件?!还有一些插件可以生成 bnd 文件、清单文件或 web.xml 文件,其中包含由 pom 提供的信息。
  • 其实jdeps(在jdk-9/bin中)可以根据编译后的代码生成一个初始描述符。但它不能成为生命周期的一部分,因为它必须手动调整。
【解决方案2】:

据我所知,bnd-maven-plugin 可以根据配置的依赖关系生成module-info.class。如果你使用maven-bundle-plugin,你需要手动指定bndlib的版本,因为最新版本的maven-bundle-plugin(5.1.3)仍然使用5.x版本的bndlib,而bndlib需要6。 x 支持 jpms。

文档:https://bnd.bndtools.org/releases/6.1.0/chapters/330-jpms.html

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 2014-11-26
    • 2021-02-23
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2021-12-18
    相关资源
    最近更新 更多