代码之家  ›  专栏  ›  技术社区  ›  Madjosz

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

  •  4
  • Madjosz  · 技术社区  · 7 年前

    在我的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中也是如此。 当我直接在清单中导入项目C时。MF,则所有操作都与JDK 1.8中的操作一样。 那么,如果可能的话,如何在不声明模块的情况下运行项目呢?

    1 回复  |  直到 4 年前
        1
  •  2
  •   benez    7 年前

    您可以修改清单。项目B中的MF将其依赖关系重新导出到项目C:

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

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