【问题标题】:Add Classpath Container to Eclipse Plugin’s Runtime将 Classpath 容器添加到 Eclipse 插件的运行时
【发布时间】:2016-05-17 05:51:10
【问题描述】:

我们使用类路径容器(由Buildship 提供)来管理我们的 Eclipse 插件项目中的非插件依赖项:

这工作得很好,项目按预期编译。

但是,如果我们使用“Eclipse 应用程序”运行配置启动我们的项目,我们会收到类似

的错误
java.lang.NoClassDefFoundError: org/apache/commons/collections4/multiset/HashMultiSet

一旦我们的插件被激活。所以很明显,Eclipse 使用类路径容器来编译项目,而不是在运行时添加它

我已经在互联网上搜索了很长时间以找到解决方案,但我没有购买:

如何告诉 Eclipse 将类路径容器添加到项目的运行时类路径中?

我没有找到任何选项来执行此操作。 我知道我可以将依赖项的 jar 添加到 MANIFEST.MF 的类路径中,但我不愿意这样做。这完全与类路径容器的想法相矛盾。相反,我希望 Eclipse 自动将所有 jar 从类路径容器添加到运行时类路径。

【问题讨论】:

    标签: java eclipse eclipse-plugin osgi-bundle eclipse-pde


    【解决方案1】:

    您不能这样做,插件所依赖的所有内容都必须列在“Require-Bundle”、“Import-Package”或“Bundle-Classpath”的 MANIFEST.MF 中。

    当您导出插件时,插件中没有关于项目类路径的信息。

    【讨论】:

    • 我是这么认为的。但我也认为 Eclipse 可以让我配置一个类路径容器并在构建时调整 MANIFEST.MF。但是没有这样的选择,是吗?
    • 抱歉,没有这个选项。实际上,对于插件,您应该反过来做——您在 MANIFEST.MF 中设置内容,Eclipse 将更新项目类路径以匹配(请参阅清单编辑器的概览选项卡上的“更新类路径设置”)。
    • 但这只有在 Eclipse 以某种方式知道依赖作为 Osgi 包的情况下才有可能。但是对于不是 Eclipse 插件的依赖项(这些就是我正在谈论的那些,这不起作用:(
    【解决方案2】:

    我找到了适合我们的解决方案:

    发展

    在开发过程中,我们通过将依赖 jar 添加到引导类路径来加载它们。对于“Eclipse Application”运行配置,我们可以将以下内容添加到配置的 JVM 参数中:

     -Xbootclasspath/a:"${project_classpath:Project1}:${project_classpath:Project2}"
    

    这很方便,因为它将所有类路径容器添加到运行时。所以我们可以通过 gradle 和 classpath 容器进行真正的依赖管理。

    生产

    对于生产,我们会将依赖项包装为 Osgi 包并自动将它们添加到 MANIFEST.MF。我们正在使用 gradle 来构建我们的项目,所以这应该不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 2011-02-09
      • 2018-06-11
      • 2020-07-09
      • 2011-04-05
      • 2013-06-18
      • 2019-10-14
      相关资源
      最近更新 更多