包含编号的自动模块名称

时间:2018-02-09 21:53:36

标签: module java-9 jigsaw java-module

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

sdk-http-ahc-2_0

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

requires sdk.http.ahc.2_0; // not valid

我是否遗漏了命名模块的内容?我的其他选择是什么?

1 个答案:

答案 0 :(得分:5)

问题是模块系统没有将2_0标识为版本号,因此在确定自动模块名称时不会将其删除。遗憾的是,2_0不是有效的Java标识符,因此不能用作模块名称中的段。

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

  1. 使用以下内容创建文件manifest.txt

    Automatic-Module-Name: sdk.http.ahc
    
  2. 然后使用jar将该行附加到现有清单:

    jar --update --file sdk-http-ahc-2_0.jar --manifest=manifest.txt
    
  3. 请注意,本地修改现有JAR(名称或清单)可能会导致问题。考虑将文件的Maven版本更改为2.0-patched-auto-name(或类似),并将其添加到本地Maven存储库。如果项目与其他开发人员共享并且您拥有本地Nexus,则可以将其放在那里。否则,向每个人发送邮件,并将步骤添加到本地仓库。