【问题标题】:Having (old) jars on the classpath of a JDK 11 project [eclipse]在 JDK 11 项目的类路径上有(旧)jars [eclipse]
【发布时间】:2019-03-17 12:50:14
【问题描述】:

我终于尝试使用 JDK 11 设置模块化 Java 项目,但我似乎没有正确使用模块和类路径。到目前为止,除了创建项目并将Apache Commons IO 2.6 添加到其类路径之外,我什么也没做。 模块文件还是空的。

然后我创建了一个测试类并使用了其中一个 Apache 类,这让我感到困惑。 Eclipse 的自动完成功能很好地为我提供了 Apache 类,甚至添加了应有的导入,但是 无法解析相同的导入。

查看下面的屏幕截图,了解我的意思。

任何帮助表示赞赏:)

【问题讨论】:

  • 您必须在您的 module-info.java 文件中为依赖声明一个 requires 指令。
  • 如果您有module-info.java 文件,请将其删除(或将 JAR 从 Classpath 移动到 Modulepath 并将 JAR 添加为模块在module-info.java 通过requires ...)。
  • 我真的很想使用 module-info.java 文件,但是 Apache Commons 库显然还没有被设计成一个 java 模块。所以,每当我将它添加到模块信息时,它都会显示“org.apache. ... cannot be resolved to a module.
  • 另外,我究竟该如何添加它?我试图将它的包作为模块来处理,但这当然行不通。 module MM_Utils { requires org.apache.commons.io.output; }
  • 看起来库使用org.apache.commons.io作为“自动模块名称”。当依赖项不是正确的模块而是用作模块(即“自动模块”)时,这是模块系统将使用的名称。鉴于此,它应该是requires org.apache.commons.io;。我不记得了,但您可能需要将库放在模块路径而不是类路径上。

标签: eclipse jar java-11 java-platform-module-system


【解决方案1】:

根据 Slaw 的评论,以下调整对我有用:

  • module路径中添加jar。
  • 在模块信息文件中添加 Apache Common 的“自动模块”(即默认模块?),在本例中为:requires org.apache.commons.io;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2011-11-17
    • 2020-02-05
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多