使用本地依赖时,命令行启动Maven项目遇类找不到问题求助
Maven本地依赖命令行运行找不到类的问题解决
你的问题出在Maven的system scope依赖特性上:IDEA会自动把systemPath指定的本地Jar包加入项目类路径,但Maven命令行工具默认不会将system scope的依赖包含到构建和运行的类路径中,尤其是exec:java插件默认忽略这类依赖,所以会出现IDE正常、命令行报错的情况。
下面是几种可行的解决办法:
方法1:将本地Jar安装到Maven本地仓库(推荐,最规范)
这是Maven官方推荐的方式,把本地Jar纳入Maven的依赖管理体系,避免路径依赖问题。执行以下命令:
mvn install:install-file -Dfile=C:/Tests/libs/something.jar -DgroupId=com.something.library -DartifactId=theId -Dversion=1.0.0 -Dpackaging=jar
然后修改pom.xml中的依赖,去掉scope和systemPath,改成普通依赖:
<dependency> <groupId>com.something.library</groupId> <artifactId>theId</artifactId> <version>1.0.0</version> </dependency>
之后不管是IDE还是mvn compile、mvn exec:java命令,都能正常识别依赖。
方法2:配置exec插件显式包含system scope依赖
如果不想把Jar安装到仓库,可以修改pom.xml的exec-maven-plugin配置,让它强制加载system scope的依赖:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>org.example.Main</mainClass> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build>
之后直接执行mvn exec:java即可运行,无需额外的-Dexec.mainClass参数(如果配置了mainClass的话)。
注意事项
尽量避免使用system scope依赖,它依赖本地绝对路径,移植性极差,团队协作时其他成员的本地路径不同就会出现同样的报错,优先用方法1解决问题。
内容的提问来源于stack exchange,提问作者Feldmarshall
相关产品推荐
相关产品推荐

