Repackager.java:核心重新打包工具,支持解压、修改合并和重新打包JAR文件

news/2026/1/21 13:21:07/文章来源:https://www.cnblogs.com/yitian-lg/p/19511202
import java.io.*;
import java.util.jar.*;
import java.util.zip.*;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;public class Repackager {public static void main(String[] args) {if (args.length < 2) {System.out.println("用法: java Repackager <原JAR路径> <新JAR路径> [修改文件夹]");return;}String originalJar = args[0];String newJar = args[1];String modificationDir = args.length > 2 ? args[2] : null;try {repackJar(originalJar, newJar, modificationDir);System.out.println("JAR包重新打包完成: " + newJar);} catch (Exception e) {System.err.println("重新打包失败: " + e.getMessage());e.printStackTrace();}}public static void repackJar(String originalJar, String newJar, String modificationDir) throws IOException {// 创建临时目录用于解压Path tempDir = Files.createTempDirectory("jar_repack_");try {// 解压原JAR包
            extractJar(originalJar, tempDir);// 如果提供了修改目录,则合并修改内容if (modificationDir != null) {mergeModifications(tempDir, modificationDir);}// 重新打包
            createJar(newJar, tempDir);} finally {// 清理临时目录
            deleteRecursively(tempDir);}}private static void extractJar(String jarPath, Path destDir) throws IOException {try (JarInputStream jarIn = new JarInputStream(new FileInputStream(jarPath))) {JarEntry entry;while ((entry = jarIn.getNextJarEntry()) != null) {Path entryPath = destDir.resolve(entry.getName());if (entry.isDirectory()) {Files.createDirectories(entryPath);} else {Files.createDirectories(entryPath.getParent());Files.copy(jarIn, entryPath, StandardCopyOption.REPLACE_EXISTING);}}}}private static void mergeModifications(Path baseDir, String modDir) throws IOException {Path modPath = Paths.get(modDir);if (!Files.exists(modPath)) {System.out.println("修改目录不存在: " + modDir);return;}Files.walkFileTree(modPath, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {Path relativePath = modPath.relativize(file);Path targetPath = baseDir.resolve(relativePath);Files.createDirectories(targetPath.getParent());Files.copy(file, targetPath, StandardCopyOption.REPLACE_EXISTING);return FileVisitResult.CONTINUE;}});}private static void createJar(String jarPath, Path sourceDir) throws IOException {try (JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarPath))) {Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {String entryName = sourceDir.relativize(file).toString().replace('\\', '/');jarOut.putNextEntry(new JarEntry(entryName));Files.copy(file, jarOut);jarOut.closeEntry();return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {String entryName = sourceDir.relativize(dir).toString().replace('\\', '/') + "/";jarOut.putNextEntry(new JarEntry(entryName));jarOut.closeEntry();return FileVisitResult.CONTINUE;}});}}private static void deleteRecursively(Path path) throws IOException {if (Files.exists(path)) {Files.walkFileTree(path, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {Files.delete(file);return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {Files.delete(dir);return FileVisitResult.CONTINUE;}});}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1194698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fft npainting lama start_app.sh脚本解析:启动流程拆解

fft npainting lama start_app.sh脚本解析&#xff1a;启动流程拆解 1. 脚本功能与系统定位 1.1 图像修复系统的整体架构 fft npainting lama 是一个基于深度学习的图像修复工具&#xff0c;专注于重绘、修复、移除图片中的指定物品或瑕疵。该项目由开发者“科哥”进行二次开…

AI语音分析2026年必看趋势:开源+情感识别成主流

AI语音分析2026年必看趋势&#xff1a;开源情感识别成主流 1. 引言&#xff1a;为什么AI语音理解正在进入“富文本”时代&#xff1f; 你有没有遇到过这样的场景&#xff1f;一段客服录音&#xff0c;光靠文字转写根本看不出客户是满意还是愤怒&#xff1b;一段视频内容&…

Qwen3-1.7B模型切换指南:从Qwen2升级注意事项详解

Qwen3-1.7B模型切换指南&#xff1a;从Qwen2升级注意事项详解 Qwen3-1.7B是阿里巴巴通义千问系列最新推出的轻量级大语言模型&#xff0c;专为高效推理与本地部署优化&#xff0c;在保持较小参数规模的同时显著提升了语义理解、逻辑推理和多轮对话能力。作为Qwen2-1.7B的迭代版…

你还在用if(obj != null)?2024主流团队已切换的6种编译期/运行期null防护范式

第一章&#xff1a;Java中NullPointerException的典型触发场景 在Java开发过程中&#xff0c; NullPointerException&#xff08;NPE&#xff09;是最常见的运行时异常之一。它通常发生在程序试图访问或操作一个值为 null 的对象引用时。理解其典型触发场景有助于编写更健壮的…

LangChain 工具API:从抽象到实战的深度解构与创新实践

LangChain 工具API&#xff1a;从抽象到实战的深度解构与创新实践 摘要 随着大型语言模型(LLM)的普及&#xff0c;如何将其能力与外部工具和API有效结合&#xff0c;成为构建实用AI系统的关键挑战。LangChain作为当前最流行的LLM应用开发框架&#xff0c;其工具API(Tool API)设…

2026年口碑好的真空镀膜厂商推荐,广东森美纳米科技专业之选

在精密制造与电子产业的高速发展中,真空镀膜技术作为提升产品性能、优化外观质感的核心工艺,其供应商的选择直接关系到终端产品的市场竞争力。面对市场上技术水平参差不齐的真空镀膜厂商,如何挑选兼具技术实力、交付…

Z-Image-Turbo开源模型实战:output_image目录管理与删除操作指南

Z-Image-Turbo开源模型实战&#xff1a;output_image目录管理与删除操作指南 Z-Image-Turbo_UI界面设计简洁直观&#xff0c;功能布局清晰&#xff0c;适合新手快速上手。界面左侧为参数设置区&#xff0c;包含图像风格、分辨率、生成步数等常用选项&#xff1b;中间是图像预览…

2026年GEO推广外贸老牌版、GEO外贸优化推广版好用品牌

2026年全球贸易数字化进程加速,GEO推广已成为出口企业打通国际市场、实现精准获客的核心引擎。无论是适配海外合规要求的GEO推广外贸老牌版,还是聚焦流量转化的GEO推广外贸优化版,抑或是兼顾覆盖广度与精准度的GEO外…

Qwen3-Embedding-0.6B API返回空?输入格式校验实战排查

Qwen3-Embedding-0.6B API返回空&#xff1f;输入格式校验实战排查 在使用Qwen3-Embedding-0.6B进行文本嵌入调用时&#xff0c;不少开发者反馈遇到API返回为空的问题。看似简单的接口调用&#xff0c;却因输入格式的细微偏差导致模型无响应或返回空结果。本文将结合实际部署与…

【Java高级特性揭秘】:泛型擦除背后的真相与性能优化策略

第一章&#xff1a;Java泛型擦除是什么意思 Java泛型擦除是指在编译期间&#xff0c;泛型类型参数的信息被移除&#xff08;即“擦除”&#xff09;&#xff0c;使得运行时无法获取泛型的实际类型。这一机制是为了兼容 Java 5 之前没有泛型的代码而设计的。编译器会在编译阶段将…

Qwen-Audio与SenseVoiceSmall对比:事件检测谁更强?部署案例

Qwen-Audio与SenseVoiceSmall对比&#xff1a;事件检测谁更强&#xff1f;部署案例 1. 引言&#xff1a;当语音理解进入“听情绪、识环境”时代 你有没有想过&#xff0c;一段音频里藏着的不只是说话内容&#xff1f;背景音乐、突然的笑声、语气里的愤怒或喜悦&#xff0c;这…

2026年广东真空镀膜推荐供应商,哪家技术强、口碑棒?

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家真空镀膜领域标杆企业,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:广东森美纳米科技有限公司 推荐指数:★★★★★ | 口碑评分:国内…

Z-Image-Turbo与HuggingFace集成:直接加载远程模型权重实战

Z-Image-Turbo与HuggingFace集成&#xff1a;直接加载远程模型权重实战 Z-Image-Turbo 是一款基于扩散模型的图像生成工具&#xff0c;具备强大的本地化部署能力。其核心优势之一在于能够无缝对接 HuggingFace 平台上的公开模型权重&#xff0c;无需手动下载即可在运行时直接加…

你真的会写冒泡排序吗?深入剖析Java实现中的4大常见错误

第一章&#xff1a;你真的会写冒泡排序吗&#xff1f;从现象到本质的思考 在算法学习的初期&#xff0c;冒泡排序几乎是每位开发者接触的第一个排序算法。它逻辑直观、实现简单&#xff0c;但正因如此&#xff0c;很多人误以为“能写出来”就等于“真正理解”。事实上&#xff…

FSMN-VAD表格输出乱码?Markdown格式化修复实战

FSMN-VAD表格输出乱码&#xff1f;Markdown格式化修复实战 1. 问题背景&#xff1a;当语音检测结果变成“乱码” 你有没有遇到过这种情况——明明模型已经成功识别出音频中的语音片段&#xff0c;但最终在网页界面上看到的 Markdown 表格却显示异常&#xff0c;内容错位、排版…

分析GEO外贸推荐推广版、GEO外贸定制推广版怎么收费

一、基础认知篇 问题1:什么是GEO外贸推荐推广版、GEO外贸定制推广版、GEO外贸大型机构推广版?三者有何核心差异? GEO外贸推荐推广版、GEO外贸定制推广版、GEO外贸大型机构推广版均是苏州聚合增长信息科技有限公司针…

2026年轿车托运公司推荐:多场景深度评价与排名,直击价格不透明与损伤隐忧

摘要 轿车托运服务已成为现代汽车生活与商业流通中不可或缺的一环,无论是个人车主因工作调动、长途自驾游产生的异地运车需求,还是汽车经销商、主机厂的批量商品车物流,都依赖专业、可靠的运输服务。然而,面对市场…

开源大模型嵌入任务入门必看:Qwen3-Embedding-0.6B部署全解析

开源大模型嵌入任务入门必看&#xff1a;Qwen3-Embedding-0.6B部署全解析 1. Qwen3-Embedding-0.6B 介绍 你有没有遇到过这样的问题&#xff1a;想从成千上万篇文章里快速找到最相关的几篇&#xff0c;或者希望让AI理解两段话是不是一个意思&#xff1f;这时候&#xff0c;文…

2026年广东真空镀膜正规供应商排名,哪家性价比高值得推荐?

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家真空镀膜领域标杆企业,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:广东森美纳米科技有限公司 推荐指数:★★★★★ | 口碑评分:国内…

2026年目前评价好的铝门窗批发排行,侧压平移推拉窗/六轨断桥推拉窗/窗纱一体铝门窗/安全门窗,铝门窗源头厂家推荐排行

随着消费者对家居品质与安全需求的持续升级,铝门窗行业正经历从基础功能向智能化、安全化、环保化的深度转型。尤其在窗纱一体铝门窗领域,兼具通风、防蚊、防盗及儿童安全防护的多功能产品成为市场主流。然而,面对品…