在windows下跑springboot的jar包,经常会用到一些命令行和操作。
#提取文件
jar xvf mqtt-10.1.0.jar BOOT-INF/classes/application.yml
#将文件装回jar包
jar uvf mqtt-10.1.0.jar BOOT-INF/classes/application.yml
执行了提取文件命令,不光会把文件提取,文件夹也会提取出来。
修改完以后,再把该文件装回去。
这个比较麻烦。通常场景都是远程登录堡垒机,通过堡垒机登录这些windows服务器。这时候,你发现jar包的某个文件的某行代码有bug,需要修改。
有idea,有jar包的源码文件。
如果在服务器上有idea那就好办了,或者在其中一台服务器上有idea。步骤如下:
1) 在源码文件上修改
2) 使用idea的maven打包(lifecycle下install)
3) 将打包好的jar包复制到有bug的那个jar包目录下(打包好的jar包的位置在idea控制台的maven日志有显示)
4) 是用上面的命令提取class文件,替换class文件
例如:有bug的jar包名为mqtt-10.1.0.jar,刚打包好的jar包名为mqtt-0.0.1-SNAPSHOT.jar,提取mqtt-0.0.1-SNAPSHOT.jar的class文件,装进mqtt-10.1.0.jar里。命令如下:
例如有bug的文件是 com.ali.service.iml.xxxServiceImpl.class
#提取文件
jar xvf mqtt-0.0.1-SNAPSHOT.jar BOOT-INF/classes/com/ali/service/iml/xxxServiceImpl.class
#将文件装回jar包
jar uvf mqtt-10.1.0.jar BOOT-INF/classes/com/ali/service/iml/xxxServiceImpl.class
没有idea,没有jar包的源码文件。
需要先下载个jd-gui,看看class文件在这个jar包的哪个目录下。
在自己电脑上用idea创建个springboot项目,创建该文件所在目录的相同名字的目录。在jd-gui里将这个class文件的代码复制出来。(但要注意,匿名内部类jd-gui无法解析。若有匿名内部类,可以直接将这个class文件使用idea解析)。这时候这个文件还是报错状态,因为很多引用的类还没有。
将有bug的jar包作为lib包引入。这时候就不会报错了。
这就是创建同样名字的目录和文件的目的:目录一样,引用的类就能保持同样的包名。这也是为了打包出来的class文件里package名字一样。
打包完以后,新旧jar包放在同一个目录下,就可以使用上面的命令,替换class文件了。
之所以这样做,因为没法对单独的文件使用javac,因为这个文件引用了很多其他类。
参考:
修改jar包中class文件_修改jar中的class文件_七朵儿花儿的博客-CSDN博客
windows自启动
1. 启动文件夹(Startup Folder): - 按下Win + R键打开“运行”对话框。 - 输入 shell:startup 并点击“确定”按钮,这将打开Windows的启动文件夹。 - 将要自动启动的程序的快捷方式或可执行文件复制到启动文件夹中。
2. 任务计划程序(Task Scheduler): - 打开“任务计划程序”(可以在开始菜单中搜索)。 - 在左侧导航窗格中,选择“创建基本任务”或“创建任务”选项。 - 按照向导的指示设置任务的名称、触发器(选择“启动时”或“登录时”)和操作(指定要运行的程序或脚本)。 - 完成设置后,任务将在系统启动时自动运行。
3. 注册表编辑器(Registry Editor): - 按下Win + R键打开“运行”对话框。 - 输入 regedit
并点击“确定”按钮,这将打开注册表编辑器。 - 导航到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
(仅对当前用户)或 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
(对所有用户)。 - 在右侧窗格中,右键单击空白处,选择“新建” > “字符串值”。 - 设置新字符串值的名称,例如“MyProgram”。 - 双击新字符串值,将其值设置为要自动启动的程序的路径。