windows下修改Jar包内容的两种方式

windows下修改Jar包内容的两种方式

  • 背景
  • 第一种:解压工具
  • 第二种:Jar命令
  • 附Jar命令用法
    • 基本用法
    • 常见选项
    • 示例1:创建一个简单的 JAR 文件
    • 示例2:创建包含清单文件的 JAR 文件
    • 示例3:列出 JAR 文件的内容
    • 示例4:提取 JAR 文件的内容
    • 示例5:更新 JAR 文件
    • 示例6:创建可执行的 JAR 文件

背景

最近被公司的成分分析搞怕了,每个版本不关多少改动,都要扫描,动不动就通报,关键是 Jar 包里有些依赖的三方组件已经升级到最新版本,仍然能扫出问题,总不能自己重写组件吧,不能改就暂时删掉得了。下面分享下两种修改 Jar 内文件的两种方式,顺便记录下 Jar 命令的常用方式。

第一种:解压工具

JAR包:主要用于打包 Java 应用程序和库。JAR 包包含了 Java 类文件、资源文件(如图像、配置文件等)和一个特殊的 META-INF 目录,其中包含了元数据(如清单文件 MANIFEST.MF)。

JAR 包实际上是采用 ZIP 格式压缩的文件。因此,可以使用 ZIP 解压工具来打开和解压 JAR 文件。

Windows平台上可以使用压缩工具,直接在压缩包内剔除不要的组件。

依赖的组件在\BOOT-INF\lib目录下,可直接删除。

解压工具直接打开

删除选中的组件

第二种:Jar命令

如果配置了 jdk 开发环境,那么就能在环境变量里找到jar命令。

image-20240626150213231

1、解压jar包并手动替换

使用以下jar命令进行解析:

jar -xvf xxx.jar

image-20240626150435627

2、编辑后再压缩

解压之后可以删除或修改相关文件,之后再用以下命令进行打成jar包。

jar -cfM0 test.jar BOOT-INF/ META-INF/ org/

image-20240626150654550

好了,以上就是要分享的两种方式,希望能帮你解燃眉之急,关键还是要认真处理成分析中的组件依赖,尽量先升级来适配,或者通过提供灰名单的方式来沟通解决问题。

附Jar命令用法

jar 命令是 JDK(Java Development Kit)中用于创建、管理和提取 JAR(Java ARchive)文件的工具。JAR 文件是一种用于打包多个文件(通常是 Java 类文件和资源文件)成一个压缩归档文件的格式。以下是 jar 命令的使用方式和常见选项的详细介绍:

基本用法

jar 命令的基本语法格式如下:

jar [options] [jar-file] [manifest-file] [entry-point] [-C dir] files

常见选项

  • c:创建新的 JAR 文件。
  • f:指定 JAR 文件的名称。
  • v:生成详细输出,显示正在处理的文件。
  • m:包含指定的清单文件(manifest)。
  • e:指定 JAR 包的入口点(即包含 main 方法的类),用于创建可执行 JAR 文件。
  • t:列出 JAR 文件的内容。
  • x:从 JAR 文件中提取文件。
  • u:更新现有的 JAR 文件。
  • C:改变目录,将指定目录下的文件添加到 JAR 文件中。
  • 0: 仅存储; 不使用任何 ZIP 压缩。

示例1:创建一个简单的 JAR 文件

假设你有一个目录结构如下:

myapp/
├── com/
│   └── example/
│       └── Main.class
└── resources/
    └── config.properties

你可以使用以下命令创建一个名为 myapp.jar 的 JAR 文件:

jar cf myapp.jar -C myapp/ .

这会创建一个包含 myapp/ 目录下所有文件的 JAR 文件。

示例2:创建包含清单文件的 JAR 文件

你可以创建一个自定义的清单文件 MANIFEST.MF

Manifest-Version: 1.0
Main-Class: com.example.Main

然后使用以下命令创建包含此清单文件的 JAR 文件:

jar cmf MANIFEST.MF myapp.jar -C myapp/ .

示例3:列出 JAR 文件的内容

使用 t 选项可以列出 JAR 文件的内容:

jar tf myapp.jar

示例4:提取 JAR 文件的内容

使用 x 选项可以提取 JAR 文件的内容:

jar xf myapp.jar

你可以选择性地提取特定的文件或目录:

jar xf myapp.jar com/example/Main.class

示例5:更新 JAR 文件

使用 u 选项可以更新现有的 JAR 文件,添加或更新其中的文件:

jar uf myapp.jar -C myapp/ .

示例6:创建可执行的 JAR 文件

假设你的清单文件(MANIFEST.MF)包含以下内容:

Manifest-Version: 1.0
Main-Class: com.example.Main

你可以使用以下命令创建一个可执行的 JAR 文件:

jar cfe myapp.jar com.example.Main -C myapp/ .

这样,运行以下命令即可启动应用程序:

java -jar myapp.jar

通过掌握这些基本命令和选项,可以有效地创建、管理和使用 JAR 文件来打包和分发 Java 应用程序和库。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面经-计算机基础

1.计算机⽹络 1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议? 计算机网络体系结构 应⽤层 应⽤层 (application-layer )的任务是通过应⽤进程间的交互来完成特定⽹络应⽤。 应⽤层协议定 义的是应⽤进程(进程:主机中正在运⾏的程序&…

SpringBoot:SpringBoot中调用失败如何重试

一、引言 在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。 Spring Retry为Spri…

HarmonyOS Next开发学习手册——视频播放 (Video)

Video组件用于播放视频文件并控制其播放状态,常用于为短视频和应用内部视频的列表页面。当视频完整出现时会自动播放,用户点击视频区域则会暂停播放,同时显示播放进度条,通过拖动播放进度条指定视频播放到具体位置。具体用法请参考…

MATLAB|更改绘图窗口的大小和位置

MATLAB绘图 plot、plot3、cdfplot都适用 效果 如下图,运行程序后可以直接得到这两个绘图窗口。 右上角的Figure1是原始图片,右下角的Figure2是调整了位置和大小后的绘图窗口。 完整源代码 % 绘图大小和位置调整 % Evand©2024 % 2024-7-1/Ver1…

信息系统的安全模型

1. 信息系统的安全目标 信息系统的安全目标是控制和管理主体(含用户和进程)对客体(含数据和程序)的访问。作为信息系统安全目标,就是要实现: 保护信息系统的可用性; 保护网络系统服务的…

【Linux】:环境变量

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux环境变量的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门…

芒果YOLOv10改进122:注意力机制系列:最新结合即插即用CA(Coordinate attention) 注意力机制,CVPR 顶会助力分类检测涨点!

论文所提的Coordinate注意力很简单,可以灵活地插入到经典的移动网络中,而且几乎没有计算开销。大量实验表明,Coordinate注意力不仅有益于ImageNet分类,而且更有趣的是,它在下游任务(如目标检测和语义分割)中表现也很好。本文结合目标检测任务应用 应专栏读者的要求,写一…

深入学习 Kafka(2)- Partition 和 Topic

1. Partition的作用 Topic是逻辑的概念,Partition是物理的概念: Partition 对一个 Topic 的消息进行物理上的分离,让消息可以分布在不同的实体机器上,可以提升系统吞吐量和并行处理能力。每个Partition可以有多个副本&#xff08…

LinkedHashMap、TreeMap

LinkedHashMap: 有序、不重复、无索引,底层是双链表 TreeMap:底层基于红黑树,可以对键进行排序 默认排序:integer和string都是从小到大排序 例题:

农村程序员陈随易2024年中总结

今天是 2024年7月1日,时间如白驹过隙,今年已去其一半。 总结一下今年上半年的情况,给大家提供一些参考和建议。 希望大家关注一下公众号 陈随易,有些内容只在公众号发表。 先看看我的年初计划,这个在今年年初的时候&…

泛微E9开发 限制明细表列的值重复

限制明细表列的值重复 1、需求说明2、实现方法3、扩展知识点3.1 修改单个字段值(不支持附件类型)3.1.1 格式3.1.2 参数3.1.3 案例 3.2 获取明细行所有行标示3.2.1 格式3.2.2 参数说明 1、需求说明 限制明细表的“类型”字段,在同一个流程表单…

[Java基础揉碎]反射

目录 引出反射机制​编辑 介绍反射机制​编辑 反射的优点和缺点 (反射调用优化 )​编辑 Class类 class常用方法 ​编辑 ​编辑 获取class类对象的不同方式 哪些类型有class对象 ​编辑 类加载 ​编辑类加载流程图 类加载的五个阶段 ​编辑 通过反射获取类的结构信…

深入理解pytest fixture:提升测试的灵活性和可维护性!

在现代软件开发中,测试是保证代码质量的重要环节。pytest作为一个强大的测试框架,以其灵活的fixture系统脱颖而出。本文将详细介绍pytest中的fixture概念,通过具体案例展示其应用,并说明如何利用fixture提高测试的灵活性和可维护性…

HttpServletResponse设置headers返回,发现headers中缺少“Content-Length“和“Content-Type“两个参数。

业务中需要将用httpUtils请求返回的headers全部返回,塞到HttpServletResponse中,代码如下: HttpServletResponse response;// 返回headers Arrays.stream(httpResponse.getHeaders()).forEach(header -> response.setHeader(header.getNa…

FlinkX学习

FlinkX学习 FlinkX安装 由于flinkx已经改名chunjun 官网已不存在 (https://gitee.com/lugela/flinkx#flinkx)这里可以看到flinkx的操作文档 1、上传并解压 unzip flinkx-1.10.zip -d /usr/local/soft/2、配置环境变量 FLINKX_HOME/usr/local/soft/flinkx-1.10 export PATH$F…

基于Java实现图像浏览器的设计与实现

图像浏览器的设计与实现 前言一、需求分析选题意义应用意义功能需求关键技术系统用例图设计JPG系统用例图图片查看系统用例图 二、概要设计JPG.javaPicture.java 三、详细设计类图JPG.java UML类图picture.java UML类图 界面设计JPG.javapicture.java 四、源代码JPG.javapictur…

Eclipse 2024最新版本分享

一、软件介绍 Eclipse是一个开源的、基于Java的可扩展开发平台,最初由IBM公司开发,后于2001年贡献给开源社区,并由Eclipse基金会负责管理和开发。 如果在官网上下载比较慢,可以试试从云盘中下载,解压即可使用。 二、下…

免费开源的后端API服务-supabase安装和使用-简直是前端学习者福音

文章目录 它是什么安装和部署关于安装关于部署1、注册用户2、创建组织3、创建项目 创建数据库表(填充内容)填充数据库表 使用postman联调API 它是什么 一个开源免费的后端框架,firebase的替代品。可以简单理解类似于headless cms&#xff0c…

【Llama 2的使用方法】

Llama 2是Meta AI(Facebook的母公司Meta的AI部门)开发并开源的大型语言模型系列之一。Llama 2是在其前身Llama模型的基础上进行改进和扩展的,旨在提供更强大的自然语言处理能力和更广泛的应用场景。 以下是Llama 2的一些关键特性和更新点&am…