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
- 修正classpath路径:
target/test-classes仅包含测试代码和测试依赖,Jackson属于主代码依赖,不在该路径。推荐使用Mavenexec:java插件自动处理依赖classpath:mvn exec:java -Dexec.mainClass="ca.jrvs.apps.twitter.TwitterCLIApp" -Dexec.args='post "hahaha" "42.98693964646016:-81.31011004242582"' - 确认
jackson.version变量定义:检查POM是否在<properties>中定义该变量,未定义则添加:
否则Maven无法解析变量,导致依赖无法正确引入。<properties> <jackson.version>2.14.0</jackson.version> </properties>
针对第二个错误:mvn spring-boot:run找不到主类
- 明确配置主类:在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> - 检查主类位置与注解:确保
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
相关产品推荐
相关产品推荐

