Maven识别依赖允许导入但无法实例化对象的问题排查
解决Maven项目命令行运行时找不到Jsoup依赖的问题
问题原因
你通过mvn package生成的Foo-1.0-SNAPSHOT.jar仅包含项目自身代码,不包含Jsoup等第三方依赖包。Eclipse在运行时会自动将Maven管理的依赖jar加入类路径,因此能正常执行;但命令行直接指定该jar时,类路径中缺少Jsoup的jar文件,导致JVM无法找到对应的类,抛出NoClassDefFoundError。
解决方案
方法1:用Maven Exec插件直接运行(最简便)
无需手动处理类路径,直接通过Maven插件运行主类:
mvn exec:java -Dexec.mainClass="com.example.App"
方法2:打包包含所有依赖的可执行Jar(适合分发)
在项目的pom.xml中添加maven-assembly-plugin配置,让Maven打包时将所有依赖合并到一个jar中:
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <!-- 指定打包包含所有依赖 --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- 配置主类,方便直接用java -jar运行 --> <archive> <manifest> <mainClass>com.example.App</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <!-- 绑定到package阶段,执行mvn package时自动生成合并jar --> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
添加配置后,重新执行打包命令:
mvn package
打包完成后,target目录会生成Foo-1.0-SNAPSHOT-jar-with-dependencies.jar,直接运行该jar即可:
java -jar target\Foo-1.0-SNAPSHOT-jar-with-dependencies.jar
方法3:手动将依赖加入类路径(不推荐,仅作参考)
找到Maven本地仓库中Jsoup的jar文件(默认路径为C:\Users\brand\.m2\repository\org\jsoup\jsoup\1.15.3\jsoup-1.15.3.jar),在运行时将其加入类路径:
java -cp "target\Foo-1.0-SNAPSHOT.jar;C:\Users\brand\.m2\repository\org\jsoup\jsoup\1.15.3\jsoup-1.15.3.jar" com.example.App
注意:Windows系统下类路径用分号
;分隔,Linux/macOS系统用冒号:分隔。
内容的提问来源于stack exchange,提问作者juan
相关产品推荐
相关产品推荐

