You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring TwitterCLI项目运行报错:NoClassDefFoundError与类找不到问题

问题:Spring TwitterCLI项目运行报错(NoClassDefFoundError与主类找不到)

报错信息1:直接运行Java命令时的NoClassDefFoundError

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
        at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 7 more

报错信息2:使用mvn spring-boot:run时的主类找不到

java.lang.ClassNotFoundException: ca.jrvs.apps.twitter.TwitterCLIApp
    at java.net.URLClassLoader.findClass (URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:418)
    at java.lang.ClassLoader.loadClass (ClassLoader.java:351)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:553)
    at java.lang.Thread.run (Thread.java:750)

POM文件依赖配置

<dependencies>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.28</version>
    </dependency>

    <!--oauth 1.0 and httpclient4-->
    <dependency>
      <groupId>oauth.signpost</groupId>
      <artifactId>signpost-commonshttp4</artifactId>
      <version>1.2.1.2</version>
    </dependency>
    <!--Jackson JSON-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <!--testing-->
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <!--spring-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

操作步骤

  • 执行mvn clean compile package,构建成功。
  • 运行命令:java -classpath target/test-classes ca.jrvs.apps.twitter.TwitterCLIApp post "hahaha" "42.98693964646016:-81.31011004242582",触发第一个错误。
  • 尝试过jackson.version为2.7.3、2.12.0、2.14.0版本,均无效。
  • 改用mvn spring-boot:run运行,触发第二个错误。

解决方案

针对第一个错误:NoClassDefFoundError

  1. 修正classpath路径:target/test-classes仅包含测试代码和测试依赖,Jackson属于主代码依赖,不在该路径。推荐使用Maven exec:java插件自动处理依赖classpath:
    mvn exec:java -Dexec.mainClass="ca.jrvs.apps.twitter.TwitterCLIApp" -Dexec.args='post "hahaha" "42.98693964646016:-81.31011004242582"'
    
  2. 确认jackson.version变量定义:检查POM是否在<properties>中定义该变量,未定义则添加:
    <properties>
        <jackson.version>2.14.0</jackson.version>
    </properties>
    
    否则Maven无法解析变量,导致依赖无法正确引入。

针对第二个错误:mvn spring-boot:run找不到主类

  1. 明确配置主类:在Spring Boot POM中添加插件配置指定主类:
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>ca.jrvs.apps.twitter.TwitterCLIApp</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  2. 检查主类位置与注解:确保TwitterCLIApp在src/main/java/ca/jrvs/apps/twitter/目录下,且类上添加@SpringBootApplication注解,让Spring Boot能自动扫描到。

额外建议

若需打包为可执行JAR,确保Spring Boot插件配置正确,执行mvn clean package后,直接运行:

java -jar target/your-project-name.jar

无需手动配置classpath。

内容的提问来源于stack exchange,提问作者Alice Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:10:42