【问题标题】:NoClassDefFoundError with Maven and a Java Wiki LibraryNoClassDefFoundError 与 Maven 和 Java Wiki 库
【发布时间】:2015-05-02 03:23:23
【问题描述】:

我正在使用一个库来进行维基百科 API 调用,称为 Java Wiki Bot Framework. 我还使用 Maven 进行构建,并且正如 github 页面所述,我已将框架添加到 pom.xml 中。但是,当我尝试实例化库中的任何类时,它给了我这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/jwbf/core/actions/HttpActionClient
    at com.FactFinder.WikiParser.makeBot(WikiParser.java:21)
    at com.FactFinder.WikiParser.<init>(WikiParser.java:16)
    at com.FactFinder.App.main(App.java:15)
Caused by: java.lang.ClassNotFoundException: net.sourceforge.jwbf.core.actions.HttpActionClient
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 3 more

My pom.xml

显然这是当您的 jar 找不到类时出现的错误,但我检查了类路径,它看起来很好。 jar 包含在正确的文件夹中,并且我已经验证它包含我尝试使用的类。我考虑联系图书馆作者,但我认为这可能是我的问题而不是他的问题。

【问题讨论】:

    标签: java maven noclassdeffounderror


    【解决方案1】:

    您为什么使用 Snapshot 版本 4.0.0-SNAPSHOT?我强烈建议使用最终版本以避免出现问题,其中 3.1.0 似乎是最新且最受欢迎的版本:

    <dependency>
      <groupId>net.sourceforge</groupId>
      <artifactId>jwbf</artifactId>
      <version>3.1.0</version>
    </dependency>
    

    [更新]

    1. 遵循命名约定;包名:com.factfinder(全小写)。修复您的代码、pom 和目录名称。
    2. 添加 maven-jar-plugin 的版本

    请注意,我尝试使用您的 pom - 它似乎对我有用... 您确定在 Maven 构建期间没有收到任何其他警告或错误吗?你能做一个干净的包吗?

    【讨论】:

    • 快照有一些我不能没有的功能。
    • 一个干净的包可以工作。它之前给我的唯一警告是关于 maven-jar 缺少版本的警告,根据您的建议,我已修复。我还将包名称重构为全部小写。我仍然得到同样的错误。我已经联系了作者,pom似乎也适合他,这绝对是奇怪的。
    • 本地 maven 存储库可能已损坏。删除 %HOME%\.m2 (windows) 或 ~/.m2 (unix) 中的 repository 目录,然后再次执行 clean package
    • 删除了存储库,运行了干净的包。经过大量下载,构建通过。我运行了我的 jar,但仍然出现同样的错误。
    • 你是如何运行 jar 的?请注意,jar 不包含任何外部依赖项。如果你想让 jar 自己工作,那么你可能需要使用 maven shade 插件。
    【解决方案2】:

    检查 POM 的第 53 行:

    <classpathPrefix>lib\</classpathPrefix>
    

    应该是:

    <classpathPrefix>lib/</classpathPrefix>
    

    【讨论】:

    • 其实以前是反过来的,不过我翻了一下看能不能解决。
    猜你喜欢
    • 2020-04-14
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多