【问题标题】:NoClassDefFoundError of com/fasterxml/jackson/databind/ObjectMapper with Mavencom/fasterxml/jackson/databind/ObjectMapper 与 Maven 的 NoClassDefFoundError
【发布时间】:2017-05-07 00:39:57
【问题描述】:

这是一个与here 类似的问题,遗憾的是尚未解决。

如果你想调试代码,这里是GitHub repo

尽管我已将相关依赖项添加到 Mave pom.xml,但我得到了以下 NoClassDefFoundError 用于 ObjectMapper

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
    at demo.DemoMain.main(DemoMain.java:10)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

这里是源代码DemoMain.java

package demo;

import com.fasterxml.jackson.databind.ObjectMapper;

public class DemoMain {
    public static void main(String[] args) {
        System.out.println("Start");
        ObjectMapper mapper = new ObjectMapper();
        System.out.println("End");
    }
}

这是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>Demo</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.3</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.3</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.3</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>demo.DemoMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

我编译并运行应用程序

mvn clean install
java -jar target/Demo-1.0-SNAPSHOT.jar

【问题讨论】:

  • mvn clean install 构建成功了吗?
  • 是的,mvn clean install 成功了。
  • 太诡异了! Maven 构建成功意味着您的代码没有任何问题。您是否尝试使用 IDE 构建它?
  • @TuyenNguyen 我也很困惑。这是源代码存储库。 github.com/hackjutsu/StackOverflow-Maven-Jackson
  • 您应该尝试使用 IDE 来构建和运行您的代码。我已经测试了你的代码,它运行良好!

标签: java maven jackson fasterxml


【解决方案1】:

正如我回答here


默认的 maven 插件不会构建带有依赖项的胖 jar。

要构建一个与其依赖项捆绑在一起的 jar,以便我们可以使用 java -jar 执行它,我们可以使用 maven-assembly-plugin,它将名称为 xxx-jar-with-dependencies.jar 的 jar 打包。

这是一个示例pom.xml

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.example.yourMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> <!-- this is used for inheritance merges -->
                    <phase>package</phase> <!-- bind to the packaging phase -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

现在你应该可以运行你的 jar 了

java -jar xxx-jar-with-dependencies.jar

【讨论】:

    【解决方案2】:
    <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.8.5</version>
    </dependency>
    

    【讨论】:

    • 试试这个依赖
    • 你应该在你的答案中添加一个实际的解释,否则你只是粘贴了一些发帖者可能看不懂的代码。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2022-09-20
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多