将类路径容器添加到 Eclipse 插件的运行时

Add Classpath Container to Eclipse Plugin’s Runtime

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

效果很好,项目按预期编译。

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

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

一旦我们的插件被激活。很明显,Eclipse 使用类路径容器编译 项目,但不会在运行时间.[=14= 添加它]

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

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

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

你不能这样做,插件所依赖的一切都必须在'Require-Bundle'或'Import-Package'或'Bundle-Classpath'中的MANIFEST.MF中列出。

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

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

发展

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

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

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

生产

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