Java 9 的 Eclipse 插件项目中的传递依赖项
transitive dependencies in Eclipse Plugin-Project with Java 9
看来,在我的 Eclipse Oxygen 3 传递依赖项中,插件项目没有解决。考虑以下项目,其中 A 仅依赖于 B,而 B 依赖于 C:
虽然 运行 A in JDK 1.8 结果很好(正如预期的那样),但在 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-Editor
中的项目 B 打开 MANIFEST.MF
- 切换到“依赖项”选项卡
- select项目C的依赖,点击"Properties..."
- select "Reexport this dependency"
请记住,此更改还将使项目 C 中的 类 在项目 A 中可用,从而在使用这些 类.
时创建从 A 到 C 的显式依赖关系
看来,在我的 Eclipse Oxygen 3 传递依赖项中,插件项目没有解决。考虑以下项目,其中 A 仅依赖于 B,而 B 依赖于 C:
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-Editor 中的项目 B 打开 MANIFEST.MF
- 切换到“依赖项”选项卡
- select项目C的依赖,点击"Properties..."
- select "Reexport this dependency"
请记住,此更改还将使项目 C 中的 类 在项目 A 中可用,从而在使用这些 类.
时创建从 A 到 C 的显式依赖关系