Java 9 无法为自动生成的名称派生模块描述符:探索解决方法
在 Java 9 中,模块的引入提出了一个要求根据Java标识符规则定义模块名称。然而,这一要求对某些自动生成的模块名称提出了挑战,特别是那些包含关键字“native”的模块名称。
考虑 Netty Epoll 传输依赖项的情况:
<dependency> <groupId>io.netty</groupId> <artifactId>netty-transport-native-epoll</artifactId> <version>${netty.version}</version> <classifier>${epoll.os}</classifier> </dependency>
此依赖项的自动生成的模块名称是“netty.transport.native.epoll”,由于“native”的存在,它违反了 Java 标识符规则
要解决此问题,一种潜在的解决方法是修改工件的 META-INF/MANIFEST.MF 文件以包含 Automatic-Module-Name 属性。此属性定义模块名称,因为它应该在模块描述符中使用:
<manifestEntries> <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name> </manifestEntries>
但是,此解决方案需要与工件所有者协作,使其成为一个不太直接的选择。
An另一种方法是让工件所有者在其 JAR 中使用 module-info.java 包含模块声明。此操作会触发自下而上的迁移过程,其中假定不提供模块信息的依赖项导出所有包。
以上是Java 9 模块描述符错误:如何处理自动生成的名称,如'native”?的详细内容。更多信息请关注PHP中文网其他相关文章!