场景溯源 {#%E5%9C%BA%E6%99%AF%E6%BA%AF%E6%BA%90}
本人在开发一个SpringBoot框架的项目,其中用到一个第三方的jar包,需要在本地进行导入。
踩坑小计 {#%E8%B8%A9%E5%9D%91%E5%B0%8F%E8%AE%A1}
方式一:直接把jar包放入resource目录下新建的一个libs目录下(不推荐) {#%E6%96%B9%E5%BC%8F%E4%B8%80%EF%BC%9A%E7%9B%B4%E6%8E%A5%E6%8A%8Ajar%E5%8C%85%E6%94%BE%E5%85%A5resource%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%96%B0%E5%BB%BA%E7%9A%84%E4%B8%80%E4%B8%AAlibs%E7%9B%AE%E5%BD%95%E4%B8%8B(%E4%B8%8D%E6%8E%A8%E8%8D%90)}
这种方式在本地怎么用怎么好使,但是你打成jar包方式的话,springboot默认打jar包的时候是不会把resource目录下添加的jar包给打进去的,所以就会出现本地OK,打的项目包缺不能正常运行的情况
解决办法 {#%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95}
- 打包的方式改成war包
- 加什么配置使得
maven package
的时候把libs的jar包也一并打出来。
-
将 JAR 包放置在 src/main/resources/lib 目录下:
首先,确保您的本地 JAR 包位于项目的 src/main/resources/lib 目录下。如果目录不存在,请手动创建它。 -
在 pom.xml 文件中配置 Maven 插件以包括资源文件:
在项目的 pom.xml 文件中,添加以下配置以确保 Maven 在打包应用程序时包括 resource/lib 目录下的资源文件。<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>lib/**</include> </includes> </resource> </resources> </build>
这个配置将 src/main/resources 目录下的所有文件(包括 lib 子目录)包括在 Maven 构建中,并在打包时将它们复制到 JAR 文件中。
-
清理和构建项目:
执行以下 Maven 命令以清理和构建项目,并确保资源文件被正确打包:mvn clean package
这将触发 Maven 构建过程,并在构建目录中创建包含 resource/lib 目录内容的 JAR 文件。
-
验证 JAR 文件内容:
检查生成的 JAR 文件,确保 resource/lib 目录下的本地 JAR 包已包含在 JAR 文件中。您可以使用压缩工具或命令行工具查看 JAR 文件的内容。
方式二:把jar包导入到本地仓库再直接引入(推荐) {#%E6%96%B9%E5%BC%8F%E4%BA%8C%EF%BC%9A%E6%8A%8Ajar%E5%8C%85%E5%AF%BC%E5%85%A5%E5%88%B0%E6%9C%AC%E5%9C%B0%E4%BB%93%E5%BA%93%E5%86%8D%E7%9B%B4%E6%8E%A5%E5%BC%95%E5%85%A5(%E6%8E%A8%E8%8D%90)}
解决办法 {#%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95-1}
如果你当前使用的是Windows系统电脑,下面是实际的解决步骤:
-
使用WIN+R建,弹出运行窗口
-
输入
cmd
,然后在黑窗口进入需要导入项目的jar包所在位置 -
执行命令先把jar包导入到自己本地的maven仓库中,下面命令不能直接在-Dfile后面引入jar包的绝对路径,会报错,别问我是怎么知道的~
mvn install:install-file -Dfile=xxx.jar -DgroupId=com.example -DartifactId=xxx -Dversion=1.0.0 -Dpackaging=jar
-
通过如下命令在pom文件中正常引入即可
<dependencies> <!-- 其他依赖项 --> <dependency> <groupId>com.example</groupId> <artifactId>xxx(此处是上面jar包的名字)</artifactId> <version>1.0.0</version> </dependency> </dependencies>
-
引入成功后执行以下命令就OK了
mvn clean package