带有Java 9的Eclipse Plugin-Project中的传递依赖 [英] transitive dependencies in Eclipse Plugin-Project with Java 9

查看:132
本文介绍了带有Java 9的Eclipse Plugin-Project中的传递依赖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Eclipse Oxygen 3中,似乎传递性依赖项在Plugin-Projects中无法解决.考虑以下项目,其中A完全取决于B,而B取决于C: 在JDK 1.8中运行A效果很好(如预期的那样),在JDK 9中,我得到了众所周知的

It seems, that in my Eclipse Oxygen 3 transitive dependencies are not resolved in Plugin-Projects. Consider the following Project with A depending solely on B, and B depending on C: While running A in JDK 1.8 turns out fine (as expected), in JDK 9 I get the well known

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中的工作相同. 那么,如何在不声明模块的情况下使项目运行?

I know, I have not declared any modules but I thought, omitting them just keeps the project as it is, even in JDK 9. When I import project C directly in the A MANIFEST.MF, then all works as in JDK 1.8. So how to get the projects running, if possible without declaring modules?

推荐答案

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

You can modify the MANIFEST.MF in project B to reexport its dependency to project C:

  • 在MANIFEST-Editor中打开项目B中的MANIFEST.MF
  • 切换到依赖关系"标签
  • 选择项目C的依赖项,然后单击属性..."
  • 选择重新导出此依赖项"

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

Keep in mind that this change will also make classes from project C available in project A, creating an explicit dependency from A to C when using those classes.

这篇关于带有Java 9的Eclipse Plugin-Project中的传递依赖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆