我正在尝试开发Eclipse插件。这个插件使用 jgit 通过ssh使用ubuntu用户名和密码来加入git存储库。 (Clone git repository over ssh with username and password by Java)在NetbBeans中使用jgit就可以了。没有问题,它可以克隆,提交和推送项目。但是,当我将相同的代码片段移动到jgit插件的Eclipse jsch和我添加到项目冲突的jsch时。如果我删除了我添加的那个,那么我就无法编译代码(我需要在类中导入com.jcraft.jsch.Session)。另一方面,如果添加它我有以下错误
java.lang.LinkageError:
loader constraint violation: loader
(instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader)
previously initiated loading for a different type with name
"com/jcraft/jsch/Session"
有没有办法解决这个烂摊子?
我使用的是jgit-3.2.0和jsch-0.1.5.0 Eclipse版本是Kepler。
我的插件清单
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: ****
Bundle-SymbolicName: ****;singleton:=true
Bundle-Version: 1.1.0513
Bundle-Activator: ****.Activator
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.ui.browser;bundle-version="3.4.100",
org.eclipse.core.resources;bundle-version="3.8.100",
org.eclipse.ui.ide;bundle-version="3.9.0",
org.eclipse.jdt.core;bundle-version="3.9.0",
org.eclipse.core.filesystem;bundle-version="1.4.0",
org.eclipse.team.core;bundle-version="3.7.0",
org.eclipse.jgit;bundle-version="3.2.0",
org.eclipse.jdt.launching;bundle-version="3.7.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,
lib/commons-io-2.4.jar,
lib/zip4j_1.3.2.jar,
lib/jsch-0.1.50.jar
答案 0 :(得分:1)
最有可能发生LinkageError,因为有两个版本的com.jcraft.jsch.Session类(以及JSch的其他类)。一个来自捆绑包中的嵌入式库,另一个来自com.jcraft.jsch包,它很可能出现在OSGi运行时中。
不要将JSch放在bundle-classpath上。您的bundle-classpath中的JSch类将与JSch bundle' outside'
使用Require-Bundle
或Import-Package
来声明依赖关系。例如:
Require-Bundle: com.jcraft.jsch;bundle-version="[0.1.50,0.2.0)"