游乐游手机版
首页/编程语言/文章详情

修改JAR文件并重新打包的两种方式

时间:2026-04-30 12:31
本文介绍两种修改 JAR 包内文件(如配置文件或 Class 文件)后重新打包的方式:Ja va 命令方式 与 Ant 脚本方式。 核心警告 对于 Spring Boot 的可执行 JAR 包,重新打包时严禁使用压缩(必须使用存储模式),否则会导致 ClassNotFoundException 或启

本文介绍两种修改 JAR 包内文件(如配置文件或 Class 文件)后重新打包的方式:Ja va 命令方式Ant 脚本方式

修改JAR文件并重新打包的两种方式

核心警告

对于 Spring Boot 的可执行 JAR 包,重新打包时严禁使用压缩(必须使用存储模式),否则会导致 ClassNotFoundException 或启动失败。

一、Ja va 命令方式 (通用/快速)

这种方式最适合临时修改,或者手头没有构建工具的环境。操作直接,几步就能搞定。

1. 解压 JAR 文件

第一步,就是把 JAR 包里的内容“掏”出来。打开终端,执行这条命令:

# -x: 解压, -f: 指定文件, -v: 显示过程(可选)
jar -xf your-file.jar

执行后,当前目录下就会出现解压出来的所有文件和文件夹。

2. 修改文件

接下来,就是自由发挥的时间了。进入解压后的目录,找到你需要修改的文件。比如,要改配置文件,就编辑 BOOT-INF/classes/application.yml;要替换某个类,就找到对应的 .class 文件进行覆盖。

3. 重新打包 (关键步骤)

修改完成,重新打包。这里有个关键点,敲黑板了:

# 注意:必须包含 -0 参数(存储模式,不压缩)
jar -cvfm0 new-package.jar META-INF/MANIFEST.MF ./

这几个参数是这么回事:

  • -c: 创建新的归档文件。
  • -v: 生成详细输出,让你看到打包过程。
  • -f: 指定最终生成的归档文件名。
  • -m: 包含清单文件 META-INF/MANIFEST.MF,这能保留原 JAR 的 Main-Class 等关键配置。
  • -0: 存储模式(不压缩)。这是 Spring Boot 嵌套 JAR 结构能正常工作的生命线,绝对不能省。

二、使用 Ant 脚本方式 (自动化/批处理)

如果你需要频繁修改,或者项目还在用老旧的构建流程,那么写一个 Ant 脚本来自动化整个过程会更高效。

1.build.xml配置示例

下面是一个可以直接拿来用的 build.xml 示例,注释写得很清楚了:



    
        Spring Boot JAR 包热修复/修改工具
    
    
    
    
    
    
    
        
        
    
    
    
        
        
        
    
    
    
        
        
        
    

2. 执行流程

使用起来就两步,非常清晰:

# 第一步:解压 (依赖 init 和 unjar)
ant unjar
# [手动操作] 此时进入 unpacked_classes 目录修改文件
# 第二步:重新打包
ant package

核心避坑与最佳实践

方法学会了,但想一次成功不踩坑,还得注意下面这些细节。经验表明,很多启动失败的问题,根源都在这里。

关注点说明
压缩级别Spring Boot 的 BOOT-INF/lib 下的依赖包必须保持 STORED(不压缩)状态,否则类加载器无法正确读取。
目录结构严禁改变 META-INFBOOT-INForg 目录的层级关系。
数字签名如果原 JAR 包有数字签名(META-INF/*.SF, *.RSA),修改内容后会导致签名失效。生产环境需重新签名,测试环境可删除签名文件。
清单文件确保 MANIFEST.MF 中的 Main-Class 指向正确(Spring Boot 通常是 org.springframework.boot.loader.JarLauncher)。

最后,别忘了验证:

打包完成后,花几秒钟检查一下新 JAR 的内部结构,确认文件都在正确的位置:

jar -tf new-package.jar | head -n 20
来源:https://www.jb51.net/program/362467ufv.htm
上一篇C++中INI配置文件读取技术详解 下一篇SpringBoot OpenFeign整合okHttpClient实践
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
深入解析 TransactionProxyFactoryBean 功能实现与实战案例
编程语言 · 2026-07-02

深入解析 TransactionProxyFactoryBean 功能实现与实战案例

本文通过一个订单处理系统的实际案例,探讨了Spring框架中TransactionProxyFactoryBean的功能实现。文章分析了其如何通过代理模式为普通JavaBean添加声明式事务管理能力,详细阐述了其配置方式、内部工作机制,包括如何创建AOP代理以及如何与PlatformTransactionManager协作。最后,通过对比现代基于注解的事务管

TransactionProxyFactoryBean 在 Java 编程中的应用与配置详解
编程语言 · 2026-07-02

TransactionProxyFactoryBean 在 Java 编程中的应用与配置详解

本文探讨了TransactionProxyFactoryBean在Spring框架中的应用,重点解析其作为声明式事务管理核心组件的工作原理。文章阐述了该工厂Bean如何通过AOP代理机制为目标对象自动添加事务边界,详细说明了其关键配置属性如事务管理器、事务属性及目标对象的设置方法,并分析了其内部代理创建流程。最后,讨论了其优势与在现代Spring应用中的演进

WebService实战案例详解与应用场景解析
编程语言 · 2026-07-02

WebService实战案例详解与应用场景解析

本文通过一个具体的订单查询案例,深入解析WebService的核心概念与实战应用。内容涵盖WebService的基本原理、使用Java和CXF框架构建服务端与客户端的完整步骤,以及XML数据绑定、服务发布与调用等关键技术细节。旨在为开发者提供清晰、实用的WebService开发指导,帮助理解其在实际项目中的集成与通信机制。

HttpClient与其他HTTP库性能功能对比分析
编程语言 · 2026-07-02

HttpClient与其他HTTP库性能功能对比分析

在Java开发中,处理HTTP请求有多种库可选,其中ApacheHttpClient以其成熟稳定著称。本文对比分析了HttpClient与其他主流HTTP库(如JDK原生HttpURLConnection、OkHttp、SpringRestTemplate及Retrofit)在功能特性、性能表现、易用性及适用场景上的差异,旨在帮助开发者根据项目需求,如对连接

MemSQL数据库实战应用案例深度解析
编程语言 · 2026-07-02

MemSQL数据库实战应用案例深度解析

本文探讨了MemSQL在实时分析场景中的实战应用。通过剖析一个典型的电商实时用户行为分析项目案例,阐述了MemSQL如何利用其混合事务 分析处理能力、内存优化与列式存储特性,高效处理高并发数据流与复杂查询。文章重点介绍了技术选型考量、架构设计、性能优化策略及实际效果,为面临类似实时数据处理挑战的项目提供参考。