我正在使用 Eclipse 中的一个项目,该项目有 2 个项目;一个产品和一个称为视图的插件。
我在视图的 pom.xml 文件中添加了 SVNKit v1.3.5 作为依赖项,如下所示:
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.3.5</version>
<scope>compile</scope>
</dependency>
在视图插件上执行 Maven 2 Tools > Generate Eclipse Artifacts (from cache) 后,构建成功,因为它从 repo1.maven.org/maven2/...等下载了 SVNKit。
我继续并在视图插件上执行 Maven 2 Tools > Generate OSGi Bundle Manifest 和 Copy Resources,构建成功。
然后我在产品上运行 Maven 2 工具 > 生成和设置目标平台,并像往常一样为其他项目设置运行配置。
该产品设置为 Eclipse 应用程序,并验证插件没有错误。
我可以编写代码,它会检测类并且在编译时没有问题;问题是程序在运行时需要这些类。
我运行该产品,它运行良好,直到我进入需要来自 SVNKit 的任何类文件的 UI 弹出窗口。该窗口根本不弹出,控制台显示:
!ENTRY org.eclipse.ui 4 0 2012-07-19 10:07:10.242
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NoClassDefFoundError: org/tmatesoft/svn/core/SVNException
...
Caused by: java.lang.ClassNotFoundException: org.tmatesoft.svn.core.SVNException
我试过解决这个问题,但无论我尝试过什么“修复”,都会一遍又一遍地遇到同样的错误。类路径是正确的,因为它指向 m2 存储库,就像它指向其他依赖项一样:
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5.jar" sourcepath="M2_REPO/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-sources.jar">
<attributes>
<attribute value="jar:file:/<details omitted>/.m2/repository/org/tmatesoft/svnkit/svnkit/1.3.5/svnkit-1.3.5-javadoc.jar!/" name="javadoc_location"/>
</attributes>
</classpathentry>
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/svnkit/trilead-ssh2/build213-svnkit-1.3-patch/trilead-ssh2-build213-svnkit-1.3-patch.jar"/>
<classpathentry kind="var" path="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4.jar" sourcepath="M2_REPO/org/tmatesoft/sqljet/sqljet/1.0.4/sqljet-1.0.4-sources.jar"/>
任何建议,将不胜感激。提前致谢!
编辑:SVNKit v1.3.5 的清单文件与我引用的库中的其他文件相比非常短:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_15-b04 (Sun Microsystems Inc.)
其他库有更多信息,例如导出包、包版本、包名称、导入包等……这可能是问题吗?如果是这样,我已经尝试用 Google 搜索 SVNKit 1.3.5 的清单包文件,但找不到任何东西。