Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将类路径容器添加到Eclipse插件’;s运行时_Java_Eclipse_Eclipse Plugin_Osgi Bundle_Eclipse Pde - Fatal编程技术网

Java 将类路径容器添加到Eclipse插件’;s运行时

Java 将类路径容器添加到Eclipse插件’;s运行时,java,eclipse,eclipse-plugin,osgi-bundle,eclipse-pde,Java,Eclipse,Eclipse Plugin,Osgi Bundle,Eclipse Pde,我们使用类路径容器(由提供)来管理Eclipse插件项目中的非插件依赖项: 这非常有效,项目按照预期编译 然而,如果我们使用“Eclipse应用程序”运行配置启动项目,就会出现如下错误 java.lang.NoClassDefFoundError: org/apache/commons/collections4/multiset/HashMultiSet 一旦我们的插件被激活。显然,Eclipse使用类路径容器来编译项目,但不在运行时添加它 我已经在互联网上搜索了很长一段时间来寻找解决方案,

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

这非常有效,项目按照预期编译

然而,如果我们使用“Eclipse应用程序”运行配置启动项目,就会出现如下错误

java.lang.NoClassDefFoundError: org/apache/commons/collections4/multiset/HashMultiSet
一旦我们的插件被激活。显然,Eclipse使用类路径容器来编译项目,但不在运行时添加它

我已经在互联网上搜索了很长一段时间来寻找解决方案,但我没有:

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

我没有找到任何选择来做这件事。
我知道我可以在
MANIFEST.MF
中将依赖项的JAR添加到类路径中,但我不愿意这样做。这与类路径容器的概念完全矛盾。相反,我希望Eclipse自动将所有JAR从类路径容器添加到运行时类路径。

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


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

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

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

 -Xbootclasspath/a:"${project_classpath:Project1}:${project_classpath:Project2}"
这很方便,因为它会将所有类路径容器添加到运行时。因此,我们可以通过gradle和类路径容器实现真正的依赖关系管理

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

我也这么认为。但我还认为Eclipse可以让我配置一个类路径容器,并在构建时调整MANIFEST.MF。但是没有这样的选择,是吗?对不起,没有这样的选择。事实上,对于一个插件,你应该反过来做——你在MANIFEST.MF中设置东西,Eclipse将更新项目类路径以匹配(请参阅清单编辑器的Overview选项卡上的“update the classpath settings”),但这只有在Eclipse知道依赖项是Osgi包的情况下才可能实现。但是对于不是Eclipse插件的依赖项(我正在谈论的就是这些),这不起作用:(