SVN版本号打包脚本工具
做网页游戏开发的时候,经常会触及到对文件版本号的管理。
最近由于做新项目的原因,把原来手写版本号的方法改进了一下,借由svn的版本号生成及用java写了个xml解析输出文件,把手动的东西都变成全自动。
主要是思路是这样的:
1.用svn脚本生成版本的xml文件,这里要用到svn工具,这个是官方的下载地址:http://subversion.apache.org/packages.html
2.对生成的xml文件(如svn.xml)进行解析并打包。输出个二进制文件(如svn.dat)
3.工具里对版本号文件进行压缩。
下面贴出来部分关键的代码:
生成svn版本号的脚本
svn status [path] -v --xml > c:\svn.xml
主代码,打包输出并压缩几个步骤在这里
//获取XML
Document documet = GetDocument(path);
//解析
HashMap<String, Integer> map = readFromDocument(documet);
//输出二进制文件
outputBinary(map, outPath);
//压缩
compress(outPath);
解析svn版本号文件
//获取主路径
Element element = (Element)documet.getElementsByTagName("target").item(0);
mainPath = element.getAttribute("path") + "\\";
mainPath = mainPath.replaceAll("\\\\", "\\\\\\\\");; HashMap<String, Integer> map = new HashMap<>();
NodeList list = documet.getElementsByTagName("entry");
for(int i = 0; i < list.getLength(); i++) {
element = (Element)list.item(i);
String path = element.getAttribute("path");
File file = new File(path);
if(file.isFile()) {
if(path.length() != mainPath.length()) path = path.replaceFirst(mainPath, "");
//wc-status commit revision
Element verEle = (Element)(element.getElementsByTagName("commit").item(0));
Integer version = Integer.parseInt( verEle.getAttribute("revision") );
System.out.println(path + ":" + version);
map.put(path, version);
}
}
return map;
压缩输出的文件
System.out.println("#start to compress " + path);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(path));
ByteArrayOutputStream out = new ByteArrayOutputStream(1024); byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
byte[] data = out.toByteArray();
byte[] output = CompressionUtil.compress(data, CompressionUtil.Level.BEST_COMPRESSION);
System.out.println("before : " + (data.length ) + "byte"); /// 1024
System.out.println("after : " + (output.length ) + "byte"); // FileOutputStream fos = new FileOutputStream(path);
fos.write(output);
out.close();
fos.close();
整个工具的代码在这里 http://files.cnblogs.com/yans/VersionPacking.rar
调用java去打包的脚本
java -jar VersionPacking.jar [path] [outputfile]
其中path是svn.xml的路径, outputfile是输出的目录
SVN版本号打包脚本工具的更多相关文章
- Linux下Maven+SVN自动打包脚本
公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...
- 工具——代码中自动生成SVN版本号
本节和大家讨论一下程序集版本最后一位使用SVN版本号的自动生成方法,这里就向大家简单介绍一下.在进行自动部署的时候,经常需要用脚本获取程序的最新版本号.现在我们定义每个程序集的版本信息的最末段表示SV ...
- Android Gradle实用技巧——APK文件名中加上SVN版本号,日期等
有时候,我们会希望能把APK文件名上带上打包日期,打包时svn的版本号,应用版本号等.当然这些也可以手动添加,但是手动的话也未免太不优雅了,而且可能会出错. 利用Gradle,我们可以让打包出来的ap ...
- 在C++程序中自动加入svn版本号
原创文章,欢迎阅读,如果您想转载,请在第一行醒目注明原作者和原始链接. 为了方便追查和确认软件bug等问题,给软件或者库赋予版本号是个好办法. 最简单的版本号管理是记录编译时间: cout<&l ...
- 自己主动化的在程序中显示SVN版本号
有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...
- 一键删除.svn文件bat脚本
用过SVN或CVS版本控制工具的朋友,在享受着它们给我们带来的方便的同时,也许也在为这么一件事情苦恼: 如果某个目录在SVN或CVS版本控制工具的控制之下时.该目录下以及该子孙目录下都会有一个.svn ...
- C#:通过Visual Studio项目预生成命令获取SVN版本号
之前有一个winfrom项目,想要通过获取SVN版本号作为程序的内部编译版本号.网上也有各种方法,但没有一篇行得通的方法.于是我经过一系列研究,得出了一些经验,特总结成一篇博客. 方法一:通过SVN命 ...
- xcode8.3 shell 自动打包脚本 记录
题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...
- 开始你的第一个npm脚本工具
在实际开发中,一般刚开始一个项目或者刚接手一个项目,我们会运行 npm install 下载安装所有依赖, 在实际开发中,可能也会使用各种命令行-- 来提高我们开发的效率. 与它相处了这么久,你真的了 ...
随机推荐
- Android 自定义view(二) —— attr 使用
前言: attr 在前一篇文章<Android 自定义view -- attr理解>已经简单的进行了介绍和创建,那么这篇文章就来一步步说说attr的简单使用吧 自定义view简单实现步骤 ...
- 怎样设置才能允许外网访问MySQL
1.将本地数据库的user表的第一条记录的host数据改为%,或者用update user set host='%' where user='root'; 2.用MySQL的命令行客户端操作如下步骤: ...
- Learning From Data 第一章总结
之前上了台大的机器学习基石课程,里面用的教材是<Learning from data>,最近看了看觉得不错,打算深入看下去,内容上和台大的课程差不太多,但是有些点讲的更深入,想了解课程里面 ...
- Linux主机规划
当你想装linux操作系统的时候,一定要知道你的用途,不同的用途就要规划不同的装机方式. 首先要知道一些概念: 挂载:利用一个目录当成进入点,将磁盘分区的数据放置在该目录下. 磁盘第一个扇区记录的信息 ...
- EF Core 1.0 和 SQLServer 2008 分页的问题
EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...
- MIL 多示例学习 特征选择
一个主要的跟踪系统包含三个成分:1)外观模型,通过其可以估计目标的似然函数.2)运动模型,预测位置.3)搜索策略,寻找当前帧最有可能为目标的位置.MIL主要的贡献在第一条上. MIL与CT的不同在于后 ...
- ecplise常用快捷键
常用 Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+ ...
- django和apache交互的wsgi分析
很多django程序员会用django进行web程序的开发,会用django的命令行命令进行程序的调试,但不会将simpleserver换成apache的配置,也有很多django程序员知道怎么用ws ...
- 苹果版App开发心得
这几个月中做的工作包括网站开发.安卓App开发和苹果App开发,前两者用的语言都是我熟悉的java,故苹果知识的学习,较安卓知识的学习,多出「语言基础」一块,其他方面差不多. 之前发过安卓那篇,如感兴 ...
- java 使用 集合 制作学生管理系统
以上是文件组织结构 下面是个.java的具体代码: package com.collection.students.pojo; public class Student { private Strin ...