引入第三方jar包时,编译没有问题,运行时报错
因为业务的需要本地引入jar包,而不是在pom文件中引入 引入之后代码在编译时没有问题,代码也不报错,但是在运行时报java.lang.ClassNotFoundException 解决办法: 在pom文件中加入
<dependency> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${ pom.basedir}/src/main/resources/META-INF/libs/test.jar</systemPath> </dependency>
其中groupId和artifactId标签可以随便写,我这里与jar保持一致;version这里就用1.0;${pom.basedir} 可以动态找到项目的根目录,后面再加上jar的路径。
注意 如果引入了多个jar包,那么每个jar包都要添加一个这样的依赖,如果jar包比较多的话就比较杯具了。目前也没有找到更好的解决办法o(╥﹏╥)o
================================================================================================
2022年3月22日更新
上面那种方式在开发工具跑是没有问题的,但是打成jar包后启动就会报错java.lang.NoClassDefFoundError,将jar包解压出来发现lib目录并没有将jar包打包进去,那调用jar包中的类肯定会报错啊 解决办法
将第三方jar包导入到本地maven仓库
注意 没有解决经验兄弟不要跳着看,这每一步都是我踩过的坑。
1、先设置一下下载的地址
2、进入jar所在目录,获取jar包的路径,这是我的jar所在的目录
3、打开cmd命令窗口,输入以下命令
mvn install:install-file -Dfile=D:fileideaProjectguowangguns-base-supportguns-base-smssrcmain esourcesMETA-INFlibscommons-beanutils-core-1.8.0.jar -DgroupId=com.dahan.commons -DartifactId=beanutils-core -Dversion=1.8.0 -Dpackaging=jar
我这里因为已经下载过了,所以立马就能看到效果,初次下载需要等一会。
注意
1、-DgroupId的参数值对应“dependency”标签下的“groupId”值 2、-DartifactId的参数值对应“dependency”标签下的“artifactId”值 3、-Dversion的参数值对应“dependency”标签下的“version”值
到本地maven仓库看看
导入到本地仓库之后的映入方式为
<dependency> <groupId>com.dahan.commons</groupId> <artifactId>beanutils-core</artifactId> <version>1.8.0</version> </dependency>
在引用这个依赖期间依赖对应的文件夹下出现的unknown、error文件夹可以删掉 unknown是没写版本号出现的错误,error是写错依赖名出现的错误。
因为这是通过第三方jar包导入的,在导入命令时用的是那个groupId、artifactId、version,引入时就只有对应groupId、artifactId、version,写错版本号出现的都是错误依赖,都删掉。
4、刷新一下依赖 可以看到dependencies已经引入maven仓库中的依赖
5、清一下开发工具的缓存 6、刷新一下依赖,clear和install
注意 如果是多模块项目,每个项目都需要来一下,从父模块到子模块、依赖模块到被依赖模块(很重要,不然还是会报错),最后打包。