当前位置: 首页 > 知识库问答 >
问题:

当Java 9模块系统集成到Maven中时,如何处理自动模块

澹台庆
2023-03-14

我已经练习了java 9模块与Maven项目的系统集成。它似乎运行良好,但我担心java 9之前编译的maven模块的向后兼容性。

为了向后兼容,JPMS(Java平台模块系统)具有自动模块的概念。在JPMS中,没有模块信息的Jar文件。java被视为自动模块,其他java模块可以使用这个jar文件,使用它的文件名作为模块名。

在与maven项目集成的情况下,我认为需要对JPMS向后兼容性的额外支持。首先,基本jar文件和maven jar文件的结构不同。其次,maven jar文件命名与规则不兼容,可以与JPMS模块命名规则兼容。请参见下面的示例。

<artifactId>previous-version-module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

在上述情况下,我们已经使用了prese-version-module-0.0.1-SNAPSHOT,并希望在新的java 9 maven项目中使用此模块。

module new.module{
  requires previous-version-module-0.0.1-SNAPSHOT
}

但会出现编译错误或IDEA工具抛出错误。

我想知道如何在java 9和maven集成项目中使用在java 9之前编译的maven jar文件。我搜索了一些额外的模块定义规则或maven插件,找不到任何解决方案。

谢谢

共有1个答案

申嘉慕
2023-03-14

如果模块名不明显,那么可以使用jar-file=

知道模块名称后,使用

 类似资料:
  • 主要内容:模块系统特征,创建模块Java 9是一种称为模块的新型编程组件。模块是一个自我描述的代码和数据集合,并有一个名称来标识它。 模块系统特征 使用模块组件,Java 9中增加了以下增强功能 - 引入了一个新的可选阶段,即链接时间。这个阶段介于编译时间和运行时间之间。 在此阶段,可以组合和优化一组模块,使用jlink工具制作自定义运行时映像。 javac,jlink和java有额外的选项来指定模块路径,它们进一步定位模块的定

  • 我目前正在测试将现有应用程序迁移到拼图模块。我的一个模块使用ElasticSearch及其Groovy插件。 org.elasticsearch:elasticsearch org.elasticsearch.module: lang-groovy 不幸的是,他们共享一个拆分包,所以给了我: X从lang.groovy和elasticsearch读取包org.elasticsearch.scrip

  • 我想在java模块中使用CDI功能。我希望我的代码保持泛型,不依赖于特定的实现。 我使用Java11和Maven3.6.0。 为了简单起见,我的目标被简化为在java文件中导入包。当我在没有module(没有)的情况下这样做时,每件事都能正常工作。 我的理解是,CDI库应该采用一个受jar文件名称启发的自动模块名称。当我使用指令运行maven时,我在类路径中看到。我相信,如果我错了,请更正,这应该

  • 我的项目依赖于Netty Epoll Transport。以下是依赖关系: 无法派生模块描述符:netty-transport-native-epoll-4.1.17。final-snapshot-linux-x 86_64.jar netty.transport.native.epoll:无效的模块名:'native'不是Java标识符 有什么变通办法吗?(当然,除了“释放正确的netty神器”

  • 伴随着移动互联的大潮,当今越来越多的网站已经从网页模式进化到了 Webapp 模式。它们运行在现代的高级浏览器里,使用 HTML5、 CSS3、 ES6 等更新的技术来开发丰富的功能,网页已经不仅仅是完成浏览的基本需求,并且webapp通常是一个单页面应用,每一个视图通过异步的方式加载,这导致页面初始化和使用过程中会加载越来越多的 JavaScript 代码,这给前端开发的流程和资源组织带来了巨大

  • 模块系统 Rust有两个与模块 (module) 系统相关的独特术语:crate和module, 其中包装箱 (crate) 与其它语言中的 libary 或者 package 作用一样。 每个包装箱都有一个隐藏的根模块,在根模块下可以定义一个子模块树, 其路径采用::作为分隔符。包装箱由条目 (item) 构成,多个条目通过模块组织在一起。 定义模块 使用mod关键字定义我们的模块: // in