java - 使用 Java 9 的 Eclipse 插件项目中的传递依赖项

标签 java dependencies java-9 eclipse-oxygen transitive-dependency

看来,在我的 Eclipse Oxygen 3 中,传递依赖项没有在插件项目中解析。考虑以下项目,其中 A 仅依赖于 B,而 B 依赖于 C: Minimal Project with transitive Dependencies 虽然在 JDK 1.8 中运行 A 结果很好(正如预期的那样),但在 JDK 9 中我得到了众所周知的

Exception in thread "main" java.lang.NoClassDefFoundError: c/C
    at b.B.<init>(B.java:9)
    at a.A.main(A.java:8)
Caused by: java.lang.ClassNotFoundException: c.C
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 2 more

我知道,我没有声明任何模块,但我想,省略它们只会使项目保持原样,即使在 JDK 9 中也是如此。 当我直接在 A MANIFEST.MF 中导入项目 C 时,一切都像在 JDK 1.8 中一样工作。 那么如何在不声明模块的情况下让项目运行呢?

最佳答案

您可以修改项目 B 中的 MANIFEST.MF 以将其依赖项重新导出到项目 C:

  • 在 MANIFEST 编辑器中打开项目 B 中的 MANIFEST.MF
  • 切换到“依赖项”选项卡
  • 选择项目 C 的依赖项并单击“属性...”
  • 选择“重新导出此依赖项”

请记住,此更改还将使项目 C 中的类在项目 A 中可用,从而在使用这些类时创建从 A 到 C 的显式依赖关系。

关于java - 使用 Java 9 的 Eclipse 插件项目中的传递依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479262/

相关文章:

java - 如何在java中从B类中打印A类的数组?

java - 在 angularJS 中下载本地文件

java - Jdeps 和 Jdeprscan 有什么区别?

java - 使用 JAVA 将 .docx 转换为 HTML

Java Stackoverflow 错误递归

node.js - 为什么人们将 typescript 的类型作为依赖项存储在 package.json(而不是 devDep)中?

dependencies - 使用 rpm-maven-plugin 构建的 RPM 上的 rpmlib(FileDigests) 依赖错误

c - JNI - 遇到 "[lib].dll: Can' t 查找依赖库时如何查找丢失的库”

java - "java.lang.NoSuchFieldError: super"异常 - 编译器中的错误?

java - 无法为 Java 9 中自动生成的模块名称派生模块描述符?