NoClassDefFoundError用于项目中的新依赖项

时间:2012-07-19 15:18:30

标签: java eclipse maven-2 noclassdeffounderror classnotfoundexception

我正在使用Eclipse中的项目,该项目有2个项目;一个名为views的产品和插件。

我在视图的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&gt;在views插件上生成Eclipse工件(来自缓存),构建成功,因为它从repo1.maven.org/maven2 / ...等下载SVNKit。

我继续执行Maven 2 Tools&gt;在views插件上生成OSGi Bundle Manifest和Copy Resources,构建成功。

然后我运行Maven 2 Tools&gt;在产品上生成和设置目标平台,并像往常一样为其他项目设置运行配置。

将产品设置为eclipse应用程序,并验证插件没有错误。

我可以编写代码并检测类,并且在编译期间没有问题;问题是当程序在运行时需要类时。

我运行该产品并且工作正常,直到我进入UI弹出窗口,该窗口需要来自SVNKit的任何类文件。窗口根本没有弹出,控制台显示:

!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 repo,就像它对其他依赖项一样:

<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.)

其他库有更多信息,例如export-package,bundle version,bundle name,import-packages等......这可能是问题吗?如果是这样,我已经尝试使用Google-ing获取SVNKit 1.3.5的清单包文件,但是找不到任何内容。

1 个答案:

答案 0 :(得分:0)

尝试将范围更改为<scope>provided</scope>而不是compile

默认范围是 compile ,这意味着运行时不存在依赖关系。为此,您使用提供的范围。有关Apache Introduction to Maven Dependencies的maven依赖关系中的范围的更多信息。

希望这可以解决您的问题。