- 浏览: 161862 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
zhangzhenting:
968862
EasyMock Capture的使用 -
andey007518:
不错,明天好试验试验
基于Axis2的WS构建服务端示例 -
Z_408:
谢谢,找好多例子终于成功一个了
Spring LDAP -
jyjava:
传说中单点登录,哈哈
中国移动4A系统账号密码管理方式 -
zhangzhenting:
sat on the fix ?? all day ???
TestNG plugin for Eclipse
很早以前写过的一个应用,翻出来看看,估计以后还是大有用处的,怕弄丢了,毕竟写这个代码还是花了不少脑细胞的,就再整理整理了
直接贴代码了:
/** * 使用说明: * 注意:在使用之前需保证本地和SVN上的数据保持一致。 * * 使用方法: * 1. 查看SVN日志,将日志复制到一个文本文件 war.txt 中 * 2. 配置参数,需对以下几个参数进行配置:(对于目录路径可以不用斜杠结尾) * destPath: 生成的打包文件夹。 * workPath: 服务器下部署目录。 * 3. 执行完成之后,查看日志 log/fatwar.log 如果没有任何异常且没有错误提示信息(在最后),则表示执行成功。 * 如果执行成功,那么在日志中最后会提示生成的打包地址。 */ public class FatWarMain { private final static Logger log = LogManager.getLogger(FatWarMain.class); public static String destPath = null; // 放生成的WAR路径 public static String txtPath = "war.txt"; // 将SVN信息复制到该文本文件中 public static String workPath = null; // 注意此目录需配置为服务器目录,eclipse工作目录可能不存在JSP文件 public static void main(String[] args) { setResourceAttributeValue(); if (workPath == null || "".equals(workPath)) { log.info("请配置参数,参数值不能为空!"); return; } if (!new File(workPath).exists()) { log.info("指定服务器部署目录不存在,请检查路径是否正确!"); return; } log.info("destPath:" + destPath + " workPath:" + workPath); StringBuffer errinfo = new StringBuffer(); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(txtPath)); String string = null; while ((string = reader.readLine()) != null) { log.info("SVN信息:" + string); if (string.contains("/ProductCode/")) { String filename = string.substring(string.lastIndexOf('/') + 1); log.info("获取文件名:" + filename); if (filename.endsWith(".java")) // 编译之后生成class文件,且要考虑内部类的情况 { final String temp = filename.substring(0, filename.indexOf(".java")); // 去掉扩展名之后的文件名 String classDir = workPath + "/WEB-INF/classes" + string.substring(string.indexOf("/ProductCode/") + 12, string.lastIndexOf('/')); final String destDir = destPath + "/WEB-INF/classes" + string.substring(string.indexOf("/ProductCode/") + 12, string.lastIndexOf('/')); File[] files = new File(classDir).listFiles(new FileFilter() { public boolean accept(File file) { if (file.getName().equals(temp + ".class") || file.getName().startsWith(temp + "$")) { String dest = destDir + "/" + file.getName(); log.info("原文件路径:" + file.getPath()); log.info("目标文件路径:" + dest); Handle.copyFile(file, new File(dest)); return true; } return false; }}); if (files.length == 0) { log.warn("在路径 " + classDir + " 下找不到编译之后的文件,源文件名:" + filename); errinfo.append("SVN信息:" + string + "\n在路径 " + classDir + " 下找不到编译之后的文件,源文件名:" + filename + "\n"); } log.info("该SVN信息处理完成!\n"); } else // 对于其他类型文件 { String sourceFile = workPath + "/WEB-INF/classes" + string.substring(string.indexOf("/ProductCode/") + 12); String destFile = destPath + "/WEB-INF/classes" + string.substring(string.indexOf("/ProductCode/") + 12); log.info("原文件路径:" + sourceFile); log.info("目标文件路径:" + destFile); Handle.copyFile(new File(sourceFile), new File(destFile)); log.info("该SVN信息处理完成!\n"); } } else if (string.contains("/WebContent/")) { String sourceFile = workPath + string.substring(string.indexOf("/WebContent/") + 11); String destFile = destPath + string.substring(string.indexOf("/WebContent/") + 11); log.info("原文件路径:" + sourceFile); log.info("目标文件路径:" + destFile); Handle.copyFile(new File(sourceFile), new File(destFile)); log.info("该SVN信息处理完成!\n"); } else if (string.trim().length() > 0) { log.warn("该SVN信息不能被解析!\n"); errinfo.append("\nSVN信息:" + string + "\n该SVN信息不能被解析!\n"); } } String errorinfostr = errinfo.toString(); if (errorinfostr.length() > 0) { log.error("\n以下是错误信息:\n" + "-------------------------------------------------------------------------------------------------------------------------" + errorinfostr); } else { log.info("运行成功,打包地址:" + destPath); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { } } } public static void setResourceAttributeValue() { BufferedReader reader = null; String string = ""; try { reader = new BufferedReader(new FileReader("config/res.txt")); boolean b = false; while ((string = reader.readLine()) != null) { String key = string.substring(0, string.indexOf('=')); String value = string.substring(string.indexOf('=') + 1).trim(); if (key.equals("destPath")) { FatWarMain.destPath = value; b = true; } if (key.equals("workPath")) { FatWarMain.workPath = value; } } if (!b) { FatWarMain.destPath = String.valueOf(new Date().getTime()); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
public class Handle { /** * 拷贝文件 * @param source 原文件 * @param dest 目标文件 */ public static void copyFile(File source, File dest) { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { if (!dest.exists()) { dest.getParentFile().mkdirs(); } inputStream = new FileInputStream(source); outputStream = new FileOutputStream(dest); byte[] bs = new byte[8192]; int size = 0; while ((size = inputStream.read(bs)) != -1) { outputStream.write(bs, 0, size); } outputStream.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (outputStream != null) { outputStream.close(); } } catch (IOException e) { } try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { } } } }
项目里面还得配个LOG4J
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootCategory=info, file, stdout # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%p] %m%n log4j.appender.file=org.apache.log4j.DailyRollingFileAppender # log4j.appender.logfile.MaxBackupIndex=10 # log4j.appender.logfile.MaxFileSize=102400KB log4j.appender.file.File=log/fatwar.log log4j.appender.file.append=false log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d [%p] %m%n
- SVN升级包.rar (328.6 KB)
- 下载次数: 65
发表评论
-
测试static final 变量
2016-08-17 15:56 459private void setMockedLogg ... -
Java中调用Python代码
2016-05-17 17:22 683import org.python.core.PyFunct ... -
JAVA 练习题
2016-05-17 16:22 575需求:下面有两组数(由用户自定义)A: a1,a3,a3, ... -
JUnit培训(二)
2014-10-12 21:47 0问题: 1. 在Junit里面一些常用的方法? ... -
JUnit 培训计划
2014-10-12 21:42 628一、10/13 1. IDE 使用 2. ... -
乱码问题
2013-02-24 13:41 804我在myeclipse databae Explorer ... -
Log4j 配置
2013-02-24 11:37 923## LOGGERS ## #define a logg ... -
ReflectionTestUtils
2012-11-13 16:42 1128org.springframework.test.uti ... -
Spring与Testng整合
2013-02-25 16:00 1443Spring专门为Junit testNG提供了一套测试集成 ... -
Hibernate基础
2012-09-28 15:34 877hibernate工作原理: 1。 读取并解析配置 ... -
汉字与二进制的互相转换
2012-04-01 11:15 1984public class Test { public ... -
TestNG plugin for Eclipse
2012-03-02 14:42 1045Start Eclipse Select Help / I ... -
XML -> xsd -> Java
2011-08-08 13:51 1111XML Schema Generatorhttp://ww ... -
Hibernate EHCache
2010-09-14 14:43 1575By default, Hibernate uses EHCa ... -
Java加密技术
2010-07-22 10:53 1170很喜欢梁栋关于Java Security的文章,在这里做个汇总 ... -
中国移动4A系统账号密码管理方式
2010-07-09 15:47 15783好像现在很 ... -
统一授权管理
2010-07-07 11:24 1697用户授权管理在统一用户目录和统一资源目录的基础上,实现针对不同 ... -
操作日志队列
2010-06-25 17:27 785使用队列来记录日志 附件为测试代码 未完。。。 -
UAC产品集成策略
2010-06-22 10:10 1840接触UAC(Unified Authenticatio ... -
答复: 项目规划那些事
2010-06-12 16:27 853随便说说了,仅仅发表个人看法: 层 和 模块 不能混在一起谈 ...
相关推荐
标题 "根据SVN日志自动生成补丁" 描述了一个基于SVNKit的自动化工具,该工具能够分析SVN(Subversion)的日志,找出在版本控制中的改动,然后将这些改动打包成升级补丁,并生成相应的更新日志。这个过程在软件开发中...
总结来说,这个Java Web项目的自动打补丁包流程利用了Maven进行项目构建,通过bat脚本启动自动化,使用SVN记录版本变化,而Python脚本则负责解析日志并智能地更新指定文件。这种自动化方法大大提高了开发效率,降低...
很多童鞋可能也遇到有很多小web项目,每个项目上线前需要制作升级补丁,用ant太麻烦,配置错误的话,很容易造成打包时漏打文件,本工具结合SVN管理,将SVN变化日志复制出来,粘贴到工具中,即可生成上线补丁,这个是...
通过增量打包生成的补丁包,可以方便地发布到服务器或者应用市场,用户只需下载较小的更新包即可完成升级,极大地优化了更新流程,减少了因大文件下载而导致的失败概率。 7. **提高迭代速度**: 使用这样的工具,...
1. **补丁概念**:补丁是软件升级的一种形式,主要用来修正程序中的错误、安全漏洞或者添加新功能。它们通常比完整版的软件小,下载和应用起来更快捷。 2. **补丁类型**:补丁可以分为安全补丁、功能补丁和性能优化...
7. **软件发布**:在软件发布过程中,开发团队会利用patchdiff这样的工具来创建补丁包,供用户下载。这样可以减少下载大小,提高更新速度。 8. **开源社区**:在开源项目中,patchdiff常用于提交代码更改,开发者...
- **报表生成**:自动生成代码报告或数据库结构文档,便于理解和维护。 - **版本控制集成**:支持与常见的版本控制系统如Git、SVN等集成,便于版本管理和代码同步。 2. **汉化包**: 汉化包是为了方便中文用户...
6. 生成安装包,可以选择MSI或EXE格式,还可以生成自动更新和补丁文件。 7. 测试安装程序,确保一切正常。 总结,Advanced Installer Architect 15.9 Portable是一款面向Delphi开发者的专业安装包制作工具,其强大...
这个"MyEclipse9.1M2汉化包"是针对MyEclipse9.1M2版本的一个本地化补丁,目的是将原本英文界面转化为中文,以便于中文用户更加方便地使用这款软件。描述中提到它同样适用于MyEclipse10,意味着这个汉化包具有一定的...
6. **自动升级**:描述中提到,该软件具有自动升级功能,这意味着用户可以轻松获取到最新的补丁和功能,保持软件的最新状态。 7. **数据库连接**:可以配置多个数据库连接,便于在不同的数据库实例间切换工作。 8....
8. **报表和文档生成**:可以自动生成PL/SQL代码的文档,便于理解和维护,也可以生成数据库对象的报表,为审计和汇报提供便利。 9. **自动化脚本**:用户可以编写和运行自定义的PL/SQL脚本,实现日常数据库管理任务...
它可能包含一系列自动化脚本和工具,用于从源代码构建补丁文件,这些文件可以被用户安装以升级或修复他们的系统。 4. **Master分支**:在版本控制系统(如Git)中,"master"通常代表主分支,包含项目的主要、稳定或...
6. **版本控制**: 熟练使用SVN进行文档管理和VSS进行版本控制。 7. **操作系统**: 熟练掌握Linux文本模式和图形模式操作系统,并熟悉常用的Linux命令。 8. **测试管理工具**: 熟悉QC、Bugfree、TAPD等测试管理工具,...
- **报告生成**:根据项目数据生成各种报告,如工时报告、进度报告等。 5. **插件与定制** - **社区插件**:Redmine有丰富的社区插件,可扩展其功能,如Gantt chart viewer、时间跟踪器增强等。 - **主题定制**...
- **自动升级**: 软件能够自动检查并更新到最新版本,确保用户始终使用到最新的功能和补丁。 3. **汉化版的使用**: PLSQL Developer 11.0.0.1762_CHS.exe是该软件的简体中文版本,对于中文用户来说,界面更加友好...
它还能自动生成各种数据库对象的代码,如存储过程、函数、触发器和包。 2. **数据库对象管理**:用户可以轻松浏览和管理数据库中的所有对象,如表、视图、索引、同义词、序列、簇等。工具还支持对象的创建、修改和...
这个版本可能包含了安装程序、帮助文档、更新日志以及可能的补丁或升级文件。 在PL/SQL Developer中,用户可以进行以下主要操作: 1. **代码编辑**:提供代码高亮、自动完成、语法检查等特性,提升编程效率。 2. **...
在下载的压缩包"plsql7正式版"中,通常包含了PL/SQL Developer 7的安装程序、许可证文件以及可能的升级补丁和用户手册。安装完成后,用户即可开始使用上述功能进行Oracle数据库的开发和管理工作。由于PL/SQL ...
30.1.2 Gitolite 的安装/升级/ 415 30.1.3 关于 SSH 主机别名/ 417 30.1.4 其他的安装方法/ 418 30.2 管理 Gitolite/ 419 30.2.1 管理员克隆 gitolite-admin 管理库/ 419 30.2.2 增加新用户/ 420 30.2.3 更改授权/ ...