我们使用类路径容器(由Buildship提供)来管理Eclipse插件项目中的非插件依赖项:
这非常有效,项目按预期编译。
但是,如果我们使用“Eclipse Application”运行配置启动项目,我们会收到类似
的错误java.lang.NoClassDefFoundError: org/apache/commons/collections4/multiset/HashMultiSet
一旦我们的插件被激活,显然,Eclipse使用类路径容器来编译项目,但不会在运行时添加。
我已经在互联网上搜索了很长一段时间才找到解决方案,买我没有:
如何告诉Eclipse将类路径容器添加到项目的运行时类路径?
我没有找到任何选项。
我知道我可以将依赖项的jar添加到MANIFEST.MF
中的类路径中,但我不愿意这样做。这个完全与classpath容器的想法相矛盾。相反,我希望Eclipse自动将类路径容器中的所有jar添加到运行时类路径中。
答案 0 :(得分:1)
您无法执行此操作,插件所依赖的所有内容都必须列在“需要捆绑包”中的MANIFEST.MF或“导入包”中。 ;或者' Bundle-Classpath'。
导出插件时,没有关于插件中包含的项目类路径的信息。
答案 1 :(得分:0)
我找到了一个适合我们的解决方案:
在开发期间,我们通过将依赖项jar添加到bootclasspath来加载它们。对于“Eclipse Application”运行配置,我们可以将以下内容添加到配置的JVM参数中:
-Xbootclasspath/a:"${project_classpath:Project1}:${project_classpath:Project2}"
这很方便,因为它会将所有类路径包含器添加到运行时。所以我们可以通过gradle和classpath容器进行真正的依赖管理。
对于生产,我们将依赖项包装为Osgi包,并自动将它们添加到MANIFEST.MF
。我们正在使用gradle来构建我们的项目,所以这应该不是问题。