无法为Java 9中自动生成的模块名称派生模块描述符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (8)

我的项目取决于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 9中保留的,因此我无法将此模块作为依赖项添加到我的项目中:

module core {
    requires netty.transport.native.epoll;
}

由于:

module not found: netty.transport.<error>

另外,jar工具--describe-module报告如下内容:

无法派生模块描述符:netty-transport-native-epoll-4.1.17.Final-SNAPSHOT-linux-x86_64.jar netty.transport.native.epoll:无效的模块名称:'native'不是Java标识符

有没有解决方法?

提问于
用户回答回答于

由于规范中定义的模块声明为:

模块声明引入了一个模块名称,可以在其他模块声明中使用它来表示模块之间的关系。模块名称由一个或多个由“。”分隔的Java标识符(§3.8)组成。令牌。

这些声明表明,

在某些情况下,Internet域名可能不是有效的软件包名称。以下是处理这些情况的一些建议惯例:

  • 如果域名包含连字符或标识符(§3.8)中不允许的任何其他特殊字符,请将其转换为下划线。
  • 如果任何生成的包名称组件是关键字(§3.9),则向它们附加下划线。
  • 如果任何生成的包名称组件以数字开头,或者任何其他字符不允许作为标识符的初始字符,则在该组件的前面加上下划线。

但请记住,Underscore是Java9中的一个关键字

int _;  // is would throw error on javac based out of JDK9
int _native; // works fine

扫码关注云+社区