【问题标题】:Immutables Criteria Syntax Error In JDK 11 ModuleJDK 11 模块中的不可变标准语法错误
【发布时间】:2020-09-30 12:56:17
【问题描述】:

我有一个项目正在尝试使用不可变标准:https://immutables.github.io/criteria.html

我在 pom.xml 中添加了以下内容:

 <dependency>
  <groupId>org.immutables</groupId>
  <artifactId>criteria-inmemory</artifactId>
  <version>2.8.2</version>
</dependency>

一切似乎都很好。但是,我在导入和工作时遇到了一些问题。我对工作正常的 Immutables.Value 没有任何问题。当我导入 Criteria Eclipse 时抱怨:

The type org.immutables.criteria.Criteria is not accessible

所以我尝试将模块添加到我的 module-info.java 中,如下所示:

requires org.immutables.criteria-common;

也试过了:

requires org.immutables.criteria-inmemory;

我正在使用 Eclipse 建议来自动完成模块名称,因为我真的不知道模块名称应该是什么,但是当我添加上面的 Eclipse 时说存在语法错误,其中的“-”需要声明。所以在这一点上我有点卡住了!如果有人有任何建议,我很乐意听取他们的意见!

谢谢!!

【问题讨论】:

  • 尝试使用命令行jar --describe-module --file &lt;path to the library's&gt;.jar 确定使用什么。
  • 呃哦... $ jar --describe-module --file ./criteria-common-2.8.2.jar 无法导出模块描述符:./criteria-common-2.8.2 .jar Automatic-Module-Name:org.immutables.criteria-common:无效的模块名称:'criteria-common' 不是 Java 标识符。对这个有什么想法吗?!?
  • 是的。你会降落到 - stackoverflow.com/questions/46501388/…
  • 钱是对的。除了似乎解决方案是针对图书馆维护者的吗?给定 jar 文件的用户将如何更新它?使用该解决方案听起来我必须等到库添加了模块描述符或具有自动模块名称。我是这个级别的模块黑客的新手,所以我可能会遗漏一些东西。谢谢!!
  • 剩下的另一种解决方案是使用 jar --update --file &lt;library.jar&gt; --manifest=&lt;manifest.txt&gt; 之类的东西侵入 jar 文件,但这不是一个可靠的前进方式

标签: java java-11 java-9 immutables-library


【解决方案1】:

我能够找到不可变库的问题,并发布了以下问题:https://github.com/immutables/immutables/issues/1223

基本上,库在构建 jar 文件时在 pom.xml 中创建了一个无效的 Automatic-Module-Name 标记。我们设置的值包含一个无效的“-”。

感谢@Naman 为我指明了正确的方向!谢谢!

我仍然想知道是否可以覆盖 jar 文件模块名称。对于库的用户来说,在这种情况下以某种方式覆盖库 jar 文件模块名称似乎很有用。

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 2013-02-09
    • 2013-11-21
    • 1970-01-01
    • 2016-05-31
    • 2020-12-21
    • 2012-08-08
    • 2022-10-15
    相关资源
    最近更新 更多