springboot 升级依赖的第三方jar包

Bertha 。 2023-07-20 14:58 101阅读 0赞

前言

我们在实际工作中往往会遇到这样的问题,我们项目依赖的一些jar 包升级了,修复了一些漏洞,为了安全考虑,我们也需要进行升级,通常来说,我们不会深度的用到依赖的jar 包,所以升级一个小版本直接替换就完事了。
但是Springboot项目并没有我们想的那么简单。

打包方式

首先还得从打包方式说起,我们使用的打包方式不是直接将将依赖的jar 和配置文件都打在可运行的jar 中。我们打包方式如下:
pom.xml 文件:

  1. <build>
  2. <!--打包后的项目名称 -->
  3. <resources>
  4. <resource>
  5. <directory>src/main/resources</directory>
  6. <targetPath>${project.build.directory}${file.separator}classes</targetPath>
  7. </resource>
  8. <resource>
  9. <directory>src/main/java</directory>
  10. <includes>
  11. <!-- 这里必须包含.xml否则Mybatis的xml无法打包 -->
  12. <include>**/*.xml</include>
  13. </includes>
  14. <filtering>true</filtering>
  15. </resource>
  16. </resources>
  17. <plugins>
  18. <!-- java编译插件 -->
  19. <plugin>
  20. <groupId>org.apache.maven.plugins</groupId>
  21. <artifactId>maven-compiler-plugin</artifactId>
  22. <configuration>
  23. <source>1.8</source>
  24. <target>1.8</target>
  25. <encoding>UTF-8</encoding>
  26. <fork>true</fork>
  27. </configuration>
  28. </plugin>
  29. <!-- 打jar包的插件 -->
  30. <plugin>
  31. <groupId>org.apache.maven.plugins</groupId>
  32. <artifactId>maven-jar-plugin</artifactId>
  33. <configuration>
  34. <archive>
  35. <manifest>
  36. <addClasspath>true</addClasspath>
  37. <classpathPrefix>lib</classpathPrefix>
  38. <!-- 程序启动入口 -->
  39. <mainClass>cn.mastercom.statistics.SdzzStatisticsApplication</mainClass>
  40. </manifest>
  41. <manifestEntries>
  42. <Class-Path>./</Class-Path>
  43. </manifestEntries>
  44. </archive>
  45. <excludes>
  46. <exclude>config/**</exclude>
  47. <exclude>/**/*.xml</exclude>
  48. <exclude>/**/*.properties</exclude>
  49. </excludes>
  50. </configuration>
  51. </plugin>
  52. <plugin>
  53. <artifactId>maven-assembly-plugin</artifactId>
  54. <configuration>
  55. <!-- not append assembly id in release file name -->
  56. <appendAssemblyId>false</appendAssemblyId>
  57. <descriptors>
  58. <!-- 注意这里的路径 -->
  59. <descriptor>src/main/build/package.xml</descriptor>
  60. </descriptors>
  61. </configuration>
  62. <executions>
  63. <execution>
  64. <id>make-assembly</id>
  65. <phase>package</phase>
  66. <goals>
  67. <goal>single</goal>
  68. </goals>
  69. </execution>
  70. </executions>
  71. </plugin>
  72. </plugins>
  73. </build>

package.xml 文件内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  4. <id>package</id>
  5. <formats>
  6. <format>zip</format>
  7. </formats>
  8. <!-- 改为false不会出现两层相同的目录 -->
  9. <includeBaseDirectory>false</includeBaseDirectory>
  10. <fileSets>
  11. <fileSet>
  12. <directory>bin</directory>
  13. <outputDirectory>${file.separator}</outputDirectory>
  14. </fileSet>
  15. <fileSet>
  16. <directory>src/main/resources</directory>
  17. <outputDirectory>${file.separator}</outputDirectory>
  18. <excludes>
  19. <exclude>static/**</exclude>
  20. <exclude>templates/**</exclude>
  21. </excludes>
  22. </fileSet>
  23. <fileSet>
  24. <directory>${project.build.directory}</directory>
  25. <outputDirectory>${file.separator}</outputDirectory>
  26. <includes>
  27. <include>*.jar</include>
  28. </includes>
  29. </fileSet>
  30. </fileSets>
  31. <dependencySets>
  32. <dependencySet>
  33. <useProjectArtifact>true</useProjectArtifact>
  34. <outputDirectory>lib</outputDirectory>
  35. <scope>runtime</scope>
  36. <!--<unpack>false</unpack> -->
  37. <excludes>
  38. <!--<exclude>${project.name}-${project.version}</exclude> -->
  39. <exclude>${groupId}:${artifactId}</exclude>
  40. </excludes>
  41. </dependencySet>
  42. </dependencySets>
  43. </assembly>

最后实现的效果是,依赖jar 和配置文件外置。
在这里插入图片描述
在这里插入图片描述

升级

上面可以看到,我们依赖的jar 都存在lib 中了,那比如说要升级一个fastjson
在这里插入图片描述
如果仅仅这样修改,启动项目的时候,会发现报错,运行不起来。
造成这个原因是我们打包方式导致的,我们这样打包,在运行jar 包中有一个lib中jar 文件的索引,如果我们仅仅替换了jar。那这个索引就找不到对应的文件了。所以需要修改索引,怎么修改呢?
需要修改运行jar中的MANIFEST.MF 文件。
在这里插入图片描述

这样修改之后就可以启动成功了。
如果觉得这样麻烦,我们也可以修改项目的pom文件,将要升级的jar 进行升级,然后重新打包,替换升级的jar 和可运行的jar 可以达到一样的效果。

发表评论

表情:
评论列表 (有 0 条评论,101人围观)

还没有评论,来说两句吧...

相关阅读

    相关 gradleJar依赖统一管理

    1. 背景 一个gradle的工程中往往包含很多的子工程,每个子工程都有其自己的Jar包依赖。现实情况是各个子工程对jar包的引入都是比较随意的,版本号各式各样,如何统一