zoukankan      html  css  js  c++  java
  • 曹工杂谈:Linux服务器上,Spring Boot 原地修改 jar 包配置文件/替换class文件,免去重复上传的麻烦

    一、前言

    相信很多同学有这样的需求,现在很多公司都有多地的研发中心,经常需要跨地区部署,比如,博主人在成都,但是服务器是北京的。一般城市间网络都不怎么好,上传一个几十兆的jar包那是真的慢,别说现在微服务架构下,动辄两位数的fat jar。这里说的jar,就是spring boot项目打出来的fat jar类型,一般也有个几十兆吧。

    博主之前还遇到部署北美亚马逊环境,好不容易传个包过去,后来发现有bug,需要改class,如果重新打包再传,真的要死的心都有了。

    如果要改什么配置,或者发现某个class文件有bug,那怎么办呢?不要急,今天就是教你怎么解决这种简单问题。

    二、修改配置文件

    这个非常简单,只要使用vim即可,真正的屠龙工具。

    比如当前目录下有个spring boot 的jar包,我们可以按如下步骤:

    如上图所示,我们直接vim xxx.jar包后,可以通过 /关键字 来查找文件,查找到以后,通过方向键进行控制,enter 进入文件,修改文件、保存等操作和vim的操作一样。

    三、修改jar包中的class

    1、方式1,jar命令替换

    如果只是简单地替换文件,可以直接使用 以下命令:

    jar uvf pas-server.jar com/ceiec/pas/server/service/impl/IncidentServiceImpl

    我是不推荐该命令的,因为很麻烦,要自己去新建一级一级的目录,而且一般class文件的包名都是以 . 来分隔的,还要手动修改为文件分隔符。其次,如果输错了路径,再想删掉这个class就麻烦了。

    2、方式2,解压后再压缩的方式(极力推荐)

    细分为以下几个步骤:

    1、拷贝jar包为一个zip文件

    cp pas-server.jar pas-server.zip

    2、解压zip到指定文件夹

    unzip pas-server.zip -d pas-server-unzip/

    3、进入解压后的文件夹,修改文件

    解压后的spring boot包的结构如下,class自行修改即可(在BOOT-INF下面),我一般rz上传后,直接覆盖:

    4、重新打为spring boot 的fat包

    jar -cvfM0 pas-server.jar BOOT-INF/ META-INF/ org/

     结果如下:

    可以看到,在pas-server.jar后,我们指定了多个目录,这几个目录即是spring boot 的那几个目录。

    上述 jar 命令中相关的参数如下:

    四、普通非spring boot工程如何打包为fat jar

    博主前几天随便记录的,和这个主题有点关系,比较适用于netty工程:

    普通的maven项目,如何打成一个fat jar(包括了全部依赖jar包)?

     

    五、spring boot jar包如何解压出指定的文件

    jar -xvf  xxx.jar  BOOT-INF/classes/application.properties BOOT-INF/classes/application-dev.properties BOOT-INF/classes/application-dev.yml BOOT-INF/classes/application.yml

    上述这个命令,就是从jar包中,把配置文件提取出来

     相关参考可见man jar:

    Extract JAR file
    
    jar x[vf] [jarfile] file ... [-Joption ...] [@arg-file ...]

    总结

    今天这篇个人感觉不算丰满,但感觉没太多好写的,不像理论知识那些。不过这个还是蛮重要的,能解决开发中的实际问题,提升大家的效率吧。

    参考:

    如何用终端命令删除jar包中指定的文件或文件夹

    https://blog.csdn.net/xiligey1/article/details/82457140

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/grey-wolf/p/11291379.html
Copyright © 2011-2022 走看看