问题记录-maven依赖升级或替换(简单版)

问题背景

项目被检测到有高危漏洞,需要对部分jar进行升级。以一个jar为例记录一下升级过程。
1 找到高危漏洞的包
如果装了maven helper插件则可以在下面查看当前模块依赖包
在这里插入图片描述
2 使用maven命令
执行下面这个命令,会将当前项目的信息打印出来,那个jar依赖了什么其它的jar可以看的非常的清楚。

mvn dependency:tree

在这里插入图片描述
3 进行依赖排除
我们看到commons-text是属于gt-main的,gt-main 是我们pom里直接引用的,所以就可以在这里排除这个依赖。

<dependency>
   <groupId>org.geotools</groupId>
   <artifactId>gt-main</artifactId>
   <version>${geotools.version}</version>
   <exclusions>
       <exclusion>
           <artifactId>commons-text</artifactId>
           <groupId>org.apache.commons</groupId>
       </exclusion>
   </exclusions>
</dependency>

4 依赖替换
将里面的依赖排除,替换成我们需要升级的版本

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-text</artifactId>
   <version>1.10.0</version>
</dependency>

5 其它方法
其实我们也可以偷懒直接去替换jar 包里面的依赖,然后重新压缩成jar文件。

java jar cvfm0 demo.jar . #注意后面的. 在当前目录执行此命令

-c:创建新的 JAR 文件包
-t:列出 JAR 文件包的内容列表
-x:展开 JAR 文件包的指定文件或者所有文件
-u:更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
-v:生成详细报告并打印到标准输出
-f:指定 JAR 文件名,通常这个参数是必须的
-m:指定需要包含的 MANIFEST 清单文件
-0:只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快(最好不要压缩)
-M:不产生所有项的清单(MANIFEST〕文件,此参数会忽略-m参数
增量更新

jar -uvf0 commons-text-1.10.0.jar test  #这个命令意思是将test目录放到jar中去 
jar -uvf0 commons-compiler-3.1.2.jar META-INF/* #这个意思是将META-INF 中的所有文件添加到jar中去
#这里有个问题就是更新过一次以后,再更新会有错误

在这里插入图片描述
在这里插入图片描述

特别注意 :这样的升级方式的前提是,你所使用的接口在更高版本的jar中没有被替换,也就是能向低版本兼容如果不行,有可能就涉及到多个依赖的升级。
强烈推荐去看看一下这篇文章,关于依赖的传递和决策

### 升级 Nacos Server 2.3.2 中的内嵌 Tomcat 本 要升级 Nacos Server 2.3.2 中使用的内嵌 Tomcat 本,可以通过修改构建脚本来实现。以下是具体方法: #### 修改 Maven 构建文件 Nacos 使用 Maven 进行项目管理,在 `pom.xml` 文件中定义了依赖项及其本号。因此,需要找到与 Tomcat 相关的部分并调整其本。 1. 下载源码 首先下载对应本的 Nacos 源码: ```bash wget https://github.com/alibaba/nacos/archive/refs/tags/2.3.2.zip unzip 2.3.2.zip cd nacos-2.3.2 ``` 2. 定位 Tomcat 依赖配置 打开根目录下的 `pom.xml` 文件,查找与 Tomcat 相关的内容。通常会发现如下片段: ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> ``` 此处 `${tomcat.version}` 是一个占位符,实际值可能位于 `<properties>` 节点下。例如: ```xml <properties> <tomcat.version>9.0.x</tomcat.version> </properties> ``` 3. 更新 Tomcat 本 将上述 `<tomcat.version>` 的值替换为目标本号(如 `9.0.80`)。注意确保目标本兼容 Java 和其他框架的要求[^1]。 4. 编译项目 修改完成后重新编译整个项目: ```bash mvn clean package -Dmaven.test.skip=true ``` 5. 替换 JAR 文件 如果不想重新打包整个 Nacos,则可以直接定位到运行环境中的 Tomcat 嵌入库路径,并手动替换对应的 `.jar` 文件为新本。 #### 注意事项 - **兼容性测试**:升级后的 Tomcat 可能引入不向后兼容的功能行为变化,需进行全面功能验证。 - **日志监控**:观察应用启动过程是否有异常提示,尤其是关于 Servlet 连接池部分的日志记录[^3]。 ```java // 示例代码展示如何动态加载新的类路径以支持不同本组件 URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); method.setAccessible(true); method.invoke(classLoader, new File("/path/to/new/tomcat.jar").toURI().toURL()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值