java - 项目中新依赖项的 NoClassDefFoundError

标签 java eclipse maven-2 noclassdeffounderror classnotfoundexception

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

我在 View 的 pom.xml 文件中添加了 SVNKit v1.3.5 作为依赖项:

<dependency>
    <groupId>org.tmatesoft.svnkit</groupId>
    <artifactId>svnkit</artifactId>
    <version>1.3.5</version>
    <scope>compile</scope>
</dependency>

在 View 插件上执行 Maven 2 Tools > Generate Eclipse Artifacts (from cache) 后,构建成功,因为它从 repo1.maven.org/maven2/...等下载 SVNKit。

我继续并在 View 插件上执行 Maven 2 Tools > Generate OSGi Bundle Manifest and Copy Resources,构建成功。

然后我在产品上运行 Maven 2 Tools > Generate and Set Target Platform,并像我对其他项目所做的那样设置运行配置。

产品设置为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 存储库,就像它指向其他依赖项一样:

<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 的 list 文件非常短:

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 搜索 SVNKit 1.3.5 的 list 包文件,但没有找到任何东西。

最佳答案

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

默认作用域是编译,这意味着依赖在运行时不存在。为此,您使用提供的 范围。关于 Apache 的 Introduction to Maven Dependencies 的 Maven 依赖项范围的更多信息.

希望这能解决您的问题。

关于java - 项目中新依赖项的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563965/

相关文章:

java - 包含 Java 动态内容的电子邮件正文

java - 将 eclipse java 项目转换为 maven 不会创建 src/test/java 目录

maven - 如何将maven项目版本放入日志文件名(log4j.xml)

maven-2 - CXF maven 插件在错误的目录中生成类

maven-2 - 使用 Maven Exec Plugin 时 log4j.properties 应该位于哪里?

Java JAI BufferedImage 与 C++ OpenCV Mat imread?

java - 如何将 "WordNet Domains"集成到 WordNet 数据库中?

java - ArrayAdapter<Bitmap> 帮助填充 GridView

eclipse - Eclipse:如何显示项目的SVN存储库?

java - eclipse 中的模拟器不会运行项目