【问题标题】:NoClassDefFoundError on Maven dependency present locally本地存在 Maven 依赖项的 NoClassDefFoundError
【发布时间】:2017-11-14 17:47:47
【问题描述】:

我是 Maven 项目的新手。我正在对开源 maven 项目之一进行更改。我在向项目添加库时遇到问题。到目前为止,我已经这样做了:-

  1. 我在项目的资源文件夹中添加了一个名为 jni4net.j-0.8.8.0.jar 的库。
  2. 我右键单击 jar(在 Intellij 中)并单击“添加为库”。
  3. 然后在 pom.xml 中我添加了:-

    <dependency>
        <groupId>jar.0.8.8.0.jni4net</groupId>
        <artifactId>jar.0.8.8.0.jni4net</artifactId>
        <version>0.8.8.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/src/main/resources/jni4net.j-
         0.8.8.0.jar</systemPath>
    </dependency>
    

但是当我构建这个项目时(构建成功,测试用例正在运行)并使用它会引发以下错误:-

java.lang.NoClassDefFoundError: net/sf/jni4net/Bridge 

请帮我解决它。我是 Maven 和 pom 的新手。我查看了各种答案,但没有得到正确的答案。 PS - 我将 groupId 和 artifactID 命名为 jar 文件的反向

【问题讨论】:

  • 这到底是在什么时候发生的。您说构建成功,但是当您“使用它”时,它就会发生。在某处构建期间或尝试运行它时,这意味着什么?
  • 我指的代码是一个Teamcity插件代码。本地构建成功。然后我从目标文件夹中选择编译的 zip 并将其放置到 TeamCiy 目录中的 plugins 文件夹中,它反映在 teamcity 的插件列表中。然后我使用这个插件。

标签: java eclipse maven intellij-idea pom.xml


【解决方案1】:

这不是添加该依赖项的正确方法。

你只需要:

<dependency>
    <groupId>net.sf.jni4net</groupId>
    <artifactId>jni4net.j</artifactId>
    <version>0.8.8.0</version>
</dependency>

在您构建时,将从 Maven Central 检索依赖项。

强烈建议不要使用&lt;systemPath&gt;...&lt;/systemPath&gt;,因为它通常会将您的项目与本地环境联系起来。

【讨论】:

  • 我删除了本地存在的 jar 文件,更新了具有上述依赖关系的 pom,但现在导入 net.sf.jni4net.*;正在显示 - 无法解析 jni4net
  • 这通常通过执行初始命令行构建来解决。有时 Intellij Idea 无法下载远程依赖项。
  • 在我运行“mvn clean install”并注释掉这个库的所有用途时下载了依赖项。但是 intelliJ 在写入时开始显示错误 - import net.sf.jni4net.*;这太可悲了。
【解决方案2】:

由于jni4net.j 依赖在maven Central 中可用,您不必手动下载和放置依赖。 Maven 将下载依赖项并将其本地存储在“.m2”文件夹中。只需添加如下依赖即可。

<dependency>
   <groupId>net.sf.jni4net</groupId>
   <artifactId>jni4net.j</artifactId>
   <version>0.8.8.0</version>
</dependency>

【讨论】:

  • 我删除了本地存在的 jar 文件,更新了具有上述依赖项的 pom,但现在导入 net.sf.jni4net.*;正在显示 - 无法解析 jni4net
  • 由于您使用 intelliJ Idea 运行项目,reload the project dependencies using idea。如果这不起作用,请正确检查项目构建的天气(mvn clean install),而不会出现任何错误。
  • 事情是,只要我删除 systemPath,mvn clean install 就会失败 - 编译错误,一旦我将它替换回来,它就可以工作了。虽然包已经下载到我的 .m2 中(我猜是本地 maven 目录)
  • 你是在用idea建项目吗?虽然没有必要确保您已将离线工作转为想法。
猜你喜欢
  • 2012-05-21
  • 2020-04-14
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多