Linking

Capturing Life & Tech

  • 主页
  • 随笔
  • 关于我
所有文章 外链

Linking

Capturing Life & Tech

  • 主页
  • 随笔
  • 关于我

Java Web 增量更新 shell 脚本

阅读数:次 2019-05-14
字数统计: 725字   |   阅读时长≈ 3分

目录

1.动机
2.过程
3.适用项目类型
4.使用方式
5.使用到的技能点

1.动机

增量更新Java Web项目版本时,需要比较版本更新文件,并去targer目录下找到对应的文件,
这个过程很麻烦,并在实践中出过多次错误,为了避免这些麻烦和错误,
遂需要一个脚本来自动化该过程。

2.过程

基本过程:通过git diff遍历出版本改变的文件,并修改文件对应到target目录下,然后打包所有的更新文件。

  • 0.定义一个临时文件名,加如时间戳标识;如需要保留来写更新日志,则注释掉最后的删除命令
  • 1.定义需要手动配置的路径。主要是运行时的路径与代码diff路径,准备替换
  • 2.gitdiff文件改动。如果不需要临时文件,可以合并第23两步
  • 3.遍历更新文件,按1设置的路径,替换掉需要修改文件路径,如java文件的路径,以及java-class转换
  • 4.所有行前面加上targetPath
  • 5.找到所有的文件,zip命令压缩称一个文件
  • 6.删除临时文件

3.适用项目类型

Java Web

4.使用方式

1
2
3
4
# 注意:脚本执行的路径与target的相对路径
>>> ./autopatch.sh ^HEAD 67046c7
# ^HEA D:git当前版本commitHashID
# 67046c7:git被比较版本commitHashID

最终shell脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

# 0.临时文件名称

# diffFile='diff'$((`date '+%s'`*1000+`date '+%N'`/1000000))
# git diff $1 $2 --name-only > $diffFile

# 1.定义路径,全部采用相对路径
targetPath="target/public" # 运行时文件相对此脚本的路径,如target;target与此脚本的相对路径
javaFromPath="src/main/java/"
javaToPath="/WEB-INF/classes/"
xmlFromPath="src/main/resources"
xmlToPath="/WEB-INF/classes"
commonFromPath="src/main/webapp" # 一级目录下,与WEB-INF同级,包括jsp\js\css\images\commons\fonts
commonToPath=""

echo "开始比较"

# 参数:$1=当前版本commitID,$2=被比较的版本commitID
# 以下命令,实现上述的过程;注意:换行时不能在后面写注释

git diff $1 $2 --name-only \
| sed -e "s:$javaFromPath:$javaToPath:g" \
| sed -e "s/.java/.class/g" \
| sed -e "s:$xmlFromPath:$xmlToPath:g" \
| sed -e "s:$commonFromPath:$commonToPath:g" \
| sed -e "s:^:$targetPath&:g" \
| xargs zip upload.zip

echo "打包完成"

# 6.删除临时文件
# rm diff*

5.使用到的技能点

1.git diff 比较出发生变化的文件

2.sed 命令 替换所有文件中的pattern

1
sed -e "s/pattern/toString/g" fileName

sed 替换命令无法处理含/路径的字符串的问题,代替的方式如下

1
sed -e "s:patternHasSlash:toStringHasSlash:g" fileName

3.| 管道,数据流作为下一个命令的参数

4.zip 打包命令

5.shell 脚本换行,行尾使用 \,然后 Enter

  • 本文作者: Linking
  • 本文链接: https://linking.fun/2019/05/14/git-diff-and-zip-to-patch/
  • 版权声明: 版权所有,转载请注明出处!
  • patch
  • cs

扫一扫,分享到微信

413 too big,上传大文件,服务器连接被重置错误
应用服务器集群时钟同步
  1. 1. 1.动机
  2. 2. 2.过程
  3. 3. 3.适用项目类型
  4. 4. 4.使用方式
  5. 5. 5.使用到的技能点
© 2015-2026 Linking
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 所有文章
  • 外链

tag:

  • weather
  • 需求
  • essay
  • basketball
  • olympic
  • nginx
  • APPScan
  • SQl盲注
  • xss
  • Ajax
  • ajax
  • ai
  • agent
  • openclaw
  • ccf
  • Nginx
  • HTML5
  • html5
  • hmtl5
  • sse
  • JavaScriptCore
  • Oracle
  • operation
  • Linux
  • deploy
  • Mac Office
  • markdown
  • ListView
  • GridView
  • MySQL
  • 慢查询
  • mongodb
  • 转置
  • thought
  • network
  • ubuntu
  • NetworkManager
  • RFKill
  • Netplan
  • avatar
  • cocoa
  • blog
  • Gitalk
  • container
  • macvlan
  • docker
  • oracle
  • cookie
  • patch
  • gitea
  • git
  • iOS
  • https
  • 多线程
  • bundle
  • 兼容性
  • HTTP
  • 绘图
  • cs
  • java
  • 效率
  • 快捷键
  • route
  • nodejs
  • pip
  • arcgis
  • arcgis 建模
  • 标识
  • redis
  • read
  • bookList
  • running
  • showdoc
  • disk
  • unit-test
  • D.Wade
  • thoughts
  • duoduo
  • Python
  • python
  • tomcat
  • 读书节
  • session
  • jdk
  • war
  • 加班
  • Android onclick事件监听
  • 正则
  • 手机品牌匹配
  • ntp
  • OpenLayers
  • Geoserver
  • wechat
  • 微信公众号
  • 爬虫
  • WeChat
  • 张靓颖
  • 动漫
  • vpn
  • PPT
  • MarkDown
  • plan
  • 朱赟
  • 极客时间专栏
  • 极客邦
  • 模块化
  • MVC
  • excel
  • NBA
  • kobe
  • team
  • crawler
  • 进度条
  • ssl
  • book
  • anti-stealing-link
  • Agentic Engineering
  • Vibe Coding
  • Software 3.0
  • Andrej Karpathy
  • LLM
  • Programming
  • complain

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • GitHub Trending
  • OpenAI ChatGPT
  • Gitee码云
  • 简书
  • CSDN