【问题标题】:Automatic module name containing number [duplicate]包含数字的自动模块名称[重复]
【发布时间】:2020-01-22 00:17:02
【问题描述】:

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

sdk-http-ahc-2_0

很遗憾,当我尝试将其更改为自动模块时,模块的名称无效。

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

我在命名模块时遗漏了什么吗?我还有哪些其他选择?

【问题讨论】:

    标签: java module java-9 java-module java-platform-module-system


    【解决方案1】:

    问题在于模块系统没有将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
      

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

    【讨论】:

    • 只是根据重命名建议,然后将其从 sdk-http-ahc-2_0.jar 重命名为 sdk-http-ahc-2.0.jar 应该可以工作,因为它允许将模块名称派生为“sdk .http.ahc”。
    • 谢谢 :) 我也在考虑你提出的解决方案,但我仍然希望有更好的方法。它实际上不是直接依赖,而是另一个依赖的依赖。使用您的解决方案,我将失去更新库的选项。我想我会在创作者的 github repo 中创建一个问题,并让创作者修复名称。
    • "使用您的解决方案,我将失去更新库的选项。"你的意思是你的直接依赖?我不这么认为。您的项目可以添加对sdk-http-ahc-2_0 版本2.0-patched-auto-name 的显式依赖,然后您的构建工具应该选择对“损坏的”JAR 的传递依赖。尽管如此,从长远来看,提出问题绝对是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多