自动模块名称包含编号

Loj*_*Ibg 1 module java-platform-module-system java-9 java-module

我想在我的应用程序中使用Java 9。我的一个依赖项有一个jar名称:

sdk-http-ahc-2_0
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试将其更改为自动模块时,该模块的名称无效。

requires sdk.http.ahc.2_0; // not valid
Run Code Online (Sandbox Code Playgroud)

我在命名模块时缺少什么吗?我在这里还有其他选择吗?

Nic*_*lai 5

问题在于模块系统无法识别2_0为版本号,因此在确定自动模块名称时不会剥离它。不幸的是,2_0它不是有效的Java标识符,因此不能用作模块名称中的段。

解决方案是重命名JAR或将Automatic-Module-Name条目添加到JAR的清单中:

  1. 创建一个manifest.txt具有以下内容的文件:

    Automatic-Module-Name: sdk.http.ahc
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后使用jar将该行追加到现有清单中:

    jar --update --file sdk-http-ahc-2_0.jar --manifest=manifest.txt
    
    Run Code Online (Sandbox Code Playgroud)

请注意,在本地修改现有的JAR(名称或清单)可能会导致问题。考虑将文件的Maven版本更改为类似2.0-patched-auto-name(或类似名称)并将其添加到本地Maven存储库中。如果该项目与其他开发人员共享,并且您具有本地Nexus,则可以将其放入其中。否则,将邮件发送给所有人,并提供将其添加到其本地仓库中的步骤。