引入第三方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:\file\ideaProject\guowang\guns-base-support\guns-base-sms\src\main\resources\META-INF\libs\commons-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

注意
如果是多模块项目,每个项目都需要来一下,从父模块到子模块、依赖模块到被依赖模块(很重要,不然还是会报错),最后打包。

猜你喜欢

转载自blog.csdn.net/studio_1/article/details/123498108