Java实现动态修改Jar包内文件内容】的更多相关文章

import java.io.*; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; /** * jarPath: jar包所在路径 * jarFilePath: jar中想要修改文件所在…
需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件,这样感觉有点麻烦,就想办法能不能通过程序动态生成配置文件,然后修改或者替换掉Jar包里的配置文件,最后再上传到各个服务器去执行. 实现历程:刚开始看了大量文章,整理出来了一个操作Jar包的工具类,用工具类里面的方法去修改一个30M左右的Jar包文件时,发现耗时竟然要7秒,而且修改Jar文件的方法确实…
开发web应用时,有时更新了类却没有生效,其实是因为jboss/tomcat中其他发布包下有同名类(包括全路径都相同). 于是萌发了做个程序来检查指定目录是否存在重复类(通过asm从类文件中取类的全路径),扩展开来,还支持查找重复的文件(按文件md5进行比较),重复的jar文件. 主要代码如下: package cn.jerryhouse.util.dup_files; import java.io.File; public abstract class FileProcessor { priv…
开发web应用时,有时更新了类却没有生效,事实上是由于jboss/tomcat中其它公布包下有同名类(包含全路径都同样). 于是萌发了做个程序来检查指定文件夹是否存在反复类(通过asm从类文件里取类的全路径),扩展开来,还支持查找反复的文件(按文件md5进行比較),反复的jar文件. 主要代码例如以下: package cn.jerryhouse.util.dup_files; import java.io.File; public abstract class FileProcessor {…
需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件,这样感觉有点麻烦,就想办法能不能通过程序动态生成配置文件,然后修改或者替换掉Jar包里的配置文件,最后再上传到各个服务器去执行. 实现历程:刚开始看了大量文章,整理出来了一个操作Jar包的工具类,用工具类里面的方法去修改一个30M左右的Jar包文件时,发现耗时竟然要7秒,而且修改Jar文件的方法确实…
有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 # cd lib # ls test.jar dependency1.jar dependency2.jar 2 查看待修改jar包内类结构 $ unzip -l test.jar or $ vim test.jar 3 解压待修改jar包 $ mkdir test_dir $ unzip test.jar -d test_dir 4 查看c…
一.背景 最新想要修改rebeyond大佬的冰蝎项目,特地去网上搜索如何修改jar包中的源码再替换回去的方法,但由于现在的一些文章写的太烂,导致走了很多弯路,因此写下这篇快速使用IDEA修改源码并替换class文件再打成jar包的文章. 二.具体步骤 1.下载冰蝎项目jar包,放入D盘目录下: 2.使用IDEA新建一个maven项目,这里就叫test_123: 3.打开File -> Project Structure: 在Libraries中加入刚刚下载的jar包: 加载完如下,点击Apply…
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展,并重新打包文件,替换原有的 jar 文件,满足测试开发自身的需求. 下面以修改 eclipse 默认注释中的 ${date} 和 ${time} 对应的返回样式(如下图所示),进行实例说明.…
修改jar包配置文件的正确操作,有的时候通过一些解压工具可以对内部的文件进行修改,但是有时候会无效.这就很烦了 一.背景:       有一个springboot项目,事先我已经用编译好打成jar包以及一堆lib包出来了,这个项目需要部署在多个地方,每个地方就要修改配置文件application.properties中的参数,需要别人不依赖编程工具修改并打包.那么在不用考虑安全性的前提下,为了让别人可以方便修改参数,于是我参考了网上的经验和Java在dos中的语句,实现将jar包解压成文件夹修改…
要替换Jar包内的文件可以用以下命令实现: jar uvf myjar.jar com/test/myclass.class 这里值得注意的是  myclass.class 必须放在com/test 文件下,要和jar的路径对应起来.不然会说没有这个文件或目录.jar 包 和 com 文件夹的上级在同一个目录. cd到该目录后执行命令即可.…
Jar中的Java程序如何读取Jar包中的资源文件 比如项目的组织结构如下(以idea中的项目为例): |-ProjectName |-.idea/  //这个目录是idea中项目的属性文件夹 |-src |-com.zzl   //自己开发的类在这个包下 |-config.xml //自己的配置文件 |-target //这个目录是项目编译之后产生的输出文件夹 |-classes  //自己写的类编译之后产生的class文件,会存放到这个文件夹下 |-com/zzl   //自己写的类编译之后…
动态更新JAR包中的文件,经本人实际测试可正常执行! 一.查询jar包中要替换的文件位置 jar  -tvf  gateway.jar  |  grep  topjui.config.js 二.在当前jar包文件目录新建相同的路径并把要替换的文件放在目录下 mkdir  -p  BOOT-INF/classes/static/public/js/ 三.执行以下命令替换 jar  -uvf  gateway.jar  BOOT-INF/classes/static/public/js/topjui…
一.前言 相信很多同学有这样的需求,现在很多公司都有多地的研发中心,经常需要跨地区部署,比如,博主人在成都,但是服务器是北京的.一般城市间网络都不怎么好,上传一个几十兆的jar包那是真的慢,别说现在微服务架构下,动辄两位数的fat jar.这里说的jar,就是spring boot项目打出来的fat jar类型,一般也有个几十兆吧. 博主之前还遇到部署北美亚马逊环境,好不容易传个包过去,后来发现有bug,需要改class,如果重新打包再传,真的要死的心都有了. 如果要改什么配置,或者发现某个cl…
读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsStream("/com/lavasoft/res/a.txt");有了字节流,就能读取到文件内容了.…
Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官方下载:http://redis.io/download 可以根据需要下载不同版本 windows版:https://github.com/MSOpenTech/redis github的资源可以ZIP直接下载的(这个是给不知道的同学友情提示下) 下载完成后 可以右键解压到 某个硬盘下 比如D:\R…
使用javassist修改.class文件,并重新打包 Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果.熟练使用这套工具,可以让Java编程更接近与动态语言编程. 下面实现如何修改jar包里的方法 Javassist下载地址 查看 1.准备jar包 my/Solution.java package my.tools; public class Solution{ public int lengthOfLongestSub…
前言 Java提供了jar包的机制,使得已经开发好了的类能够顺利的被将来的工程所复用. 本章主要讲解如何使用这种工具. 包的作用 包能够将不同功用的类组织起来,从而确保类名的唯一性. 为了保证包名的唯一性,Sun公司建议将包发布公司的因特网域名的逆序作为包含此包的目录,并且不同的项目使用不同的子包. 包的结构一般是带有各种.class文件的多层目录. 但在实际项目中,一般使用的是包的压缩格式 - jar包. 打包方法 下面给出一个完整的封装jar包的例子. 1. 创建一个新的java工程. 2.…
在我们开发完java工程部署时,有时不需要web容器,为了方便部署有时候需要打成jar包. 这里介绍2种Eclipse打jar包的方式, 方式一.工程引用的jar包打在lib目录下 1.工程上右键,Export- 2.选择JAR file,下一步 3.选择要打包的内容,和保存jar包的路径,点Finish就ok了,有时可能需要修改jar包里的MANIFEST.MF文件 方式二.工程引用的jar包解压到我们的打包的文件夹里 这种方式主要是工程里有个主类,主类里有main方法可以直接执行这个类,打成…
java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.   wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.ja…
jar包        用途 axis.jar     SOAP引擎包 commons-discovery-0.2.jar     用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar     Axis运行所需要的组件包saaj.jar   创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j.jar     Axis运行所需要的组件包 activation.jar JAF框架的…
有时候我们须要使用动态更新技术,简单来说就是:当我们把开发jar包发送给用户后.假设后期升级了部分代码.这时让用户的jar包自己主动更新,而不是用户主动手动地去更新的技术就是动态更新.这个须要使用的技术之中的一个就是Android动态载入JAR包. 基本的过程分为两步,一个是将须要导出的java文件导出位jar包,java文件代码例如以下所看到的: package adapter; public class RoutePlanManager { private String name = "Ro…
刚接触java,第一次使用Java开发windows服务,也是刚不久看了SSM框架 简直也是一头雾水,不过只要用心理解,其实很简单,下面有详细的步骤,包学包会 在windows上运行jar包,需要在工作目录下使用命令行运行jar包,这样会出现一个命令行窗口 而且这个命令行窗口有可能会不小心被关闭,且服务器启动后需要人为去点击开启 对于有些服务性的程序来说,我们需要将其部署为windows服务,在系统启动的时候自动启动 后来研究了两种方式: 1.使用 JavaService.exe 安装jar包…
开发中会遇到用第三方的jar包,有时候会出现不同的jar包,包名一致的情况,这就会引发运行时异常,找不到相应的jar包. 这种问题时常困扰我们很长时间.下面提出一种解决办法,例如gson.jar. 1.新建一个文件夹 2.将要修改的jar包放到文件夹里. 3.在该文件夹下创建一个txt文件,文件名为rule.txt,文件内容为 com.google.gson.**    为jar包里的引用路径,**表示所有 JPData.com.google.gson.@1    为要修改的jar包的引用路径…
修改 jar 包 或 war 包内容 有一个 java web 项目,是 .jar 或 .war 文件,我想替换其中的部分样式(.css)或功能(.class). 步骤就是解压,替换,重新打包. 以 sample-web.war 为例 /usr/local/workspace/sample-web.war 解压缩至 sample-web 目录 unzip sample-web.war -d ./sample-web 在解压目录替换 .css 文件或 .class 文件 重新打包 jar -cvf…
使用 DJ Java Decompiler 将整个jar包反编译成源文件 所使用的软件是 DJ Java Decompiler 3.9. 下面是一个有用的参考文档,说明如何批量编译 http://www.udl.es/usuaris/jordim/Progs/Readme.txt 安装好之后,找到它的安装路径,我的是:C:\Program Files\decomp.然后将该路径加入到环境变量path中. 首先将要反编译的jar文件,用Winrar解压到和jar文件名称一样的文件夹中 在命令输入框…
在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由android动态载入运行的方案.以改善频繁升级的毛病 --前言 该技术的详细实现步骤可參考农民伯伯的博客:http://www.cnblogs.com/over140/archive/2011/11/23/2259367.html 本文以此为基础,扩展了一个简单的框架,教大家怎样使用该技术实…
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入库,需要带main()主函数: 情况2:向程序传参数,并且程序没有使用第三方jar包 这种情形下打包和情况1是一样的 情况3:程序使用了第三方jar包 这种情况下的打包要复杂一些,需要把第三方jar包一起导出,可以使用eclipse的插件fat jar,很简便,但是fat jar只支持eclipse…
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/10346278.html. 本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处描述的时打包成 jar 包后 Spring 配置类不为扫描.未注册Bean的…
解压修改后再打包 解压: jar xvf xxx.jar 打包: jar cvfm0 xxx.jar META-INF/MANIFEST.MF ./ 注: -m参数可以将 一个具体的mainfest文件打包进入jar内生成mainfest文件,否则运行jar会报no main manifest attribute in xxx.jar -0是store only:use no zip compression 只存储,不压缩 使用jar -h查看帮助 直接修改jar中的文件 首先安装zip和unz…
Java命令行启动jar包更改默认端口以及配置文件的几种方式 java -jar xxx.jar --server.port=8081 默认如果jar包没有启动文件,可以采用这种方式进行启动 java -jar xxx.jar --spring.profiles.active=dev 这种方式,你打的jar包里得有application-dev.properties或application-dev.yml这类资源文件 使用 "--spring.profiles.active" 参数,搭…