DeltaRelease--Java Web增量发布工具(附源码)
DeltaRelease,Java Web 增量发布工具,又称增量更新打包工具,是指在Java Web应用程序用来发布补丁包的一种工具。因增量发布具有风险小,更新速度快等优势,在企业Java Web应用发布补丁时所广泛使用。本着有福同享的奉献精神,小编将这款好用的工具免费送给大家。
Java Web增量发布工具的源码已经发布到GitHub,有需要的小伙伴们可以猛击这里查看。
1.publish_config.xml配置文件,配置补丁文件的源位置及发布位置
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<? xml version = "1.0" encoding = "UTF-8" ?>
< config >
< apps default = "favsoft" patchFolder = "d:/favsoft/patchFolder" >
< app appName = "deltaRelease" patchFile = "deltaReleaseFile.txt" >
< patch_source_dir >
E:\work\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\webapps\DeltaRelease
</ patch_source_dir >
< patch_dest_dir >
/opt/apache-tomcat-7.0.28/webapps/DeltaRelease
</ patch_dest_dir >
</ app >
</ apps >
</ config >
|
2.PublishService.java,发布服务类,获取编译好的补丁文件,发布到目标位置。
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package com.favccxx.favsoft.deltarelease;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class PublishService {
private static Logger logger = LogManager.getLogger(PublishService. class .getName());
public static void getDeltaReleaseFiles(){
String sourceFolder = SystemConfig.getInstance().getString( "apps[@default]" );
String patchFolder = SystemConfig.getInstance().getString( "apps[@patchFolder]" );
try {
//清理输出文件目录
File file = new File(patchFolder);
if (file.exists()){
FileUtils.cleanDirectory( new File(patchFolder));
}
FileUtils.forceMkdir( new File(patchFolder));
} catch (IOException e) {
logger.error( "Error get File, The wrong file path is:" + patchFolder);
logger.error( "Error Message is:" + e.getMessage());
}
//取出最新的class列表
List<HierarchicalConfiguration> appList = SystemConfig.getInstance().configurationsAt( "apps.app" );
for (Iterator<HierarchicalConfiguration> iterator = appList.iterator(); iterator.hasNext();) {
HierarchicalConfiguration hierarchicalConfiguration = iterator.next();
String appName = hierarchicalConfiguration.getString( "[@appName]" );
String patchFilePath = hierarchicalConfiguration.getString( "[@patchFile]" );
String patch_source_dir = hierarchicalConfiguration.getString( "patch_source_dir" );
String patch_dest_dir = hierarchicalConfiguration.getString( "patch_dest_dir" );
String destDir = patchFolder + patch_dest_dir;
//执行拷贝补丁文件
copyPatchFile(appName,patch_source_dir,patchFilePath,destDir);
}
}
private static void copyPatchFile(String appName,String sourceDir, String patchFilePath, String destDir){
logger.info( "******************************开始拷贝" + appName + "工程的补丁文件**************************" );
try {
//创建生成补丁文件的目录
FileUtils.forceMkdir( new File(destDir));
} catch (IOException e) {
logger.error( "Error get destDir,The wrong path is:" + destDir);
logger.error( "Error Message is:" + e.getMessage());
}
File patchFile = new File(Thread.currentThread().getContextClassLoader().getResource(PublishConstants.SYSTEM_CONFIG_DIR+patchFilePath).getFile()); //读取补丁文件--deltaReleaseFile.txt
try {
List fileLines = FileUtils.readLines(patchFile);
int count= 0 ;
for (Iterator iterator = fileLines.iterator(); iterator.hasNext();) {
String fileName = (String) iterator.next();
if (StringUtils.isNotEmpty(fileName)){
if (fileName.endsWith( "java" )){
//java补丁文件,需找到对应的class
fileName = fileName.replaceAll( ".java" , ".class" );
String sourceFilePath = sourceDir + "\\WEB-INF\\classes" + fileName;
File compileFile = new File(sourceFilePath);
if (compileFile.exists()){
String destFilePath = destDir + "\\WEB-INF\\classes" + fileName;
FileUtils.copyFile(compileFile, new File(destFilePath));
logger.info( "-------" + ++count + "成功拷贝补丁文件到:" + destFilePath);
} else {
logger.error( "未找到该补丁文件,错误的路径:" + sourceFilePath);
}
} else {
//JSP、CSS、JS等格式的文件直接copy到工程的目录
String sourceFilePath = sourceDir + fileName;
String destFilePath = destDir + fileName;
FileUtils.copyFile( new File(sourceFilePath), new File(destFilePath));
logger.info( "-------" + ++count + "成功拷贝补丁文件到:" + destFilePath);
}
}
}
logger.info( "******************************" + appName + "工程补丁文件获取成功,共拷贝" + count + "个补丁文件**************************" );
} catch (IOException e) {
logger.error( "Error in execute copyPatchFile. The wrong message is:" + e.getMessage());
}
}
} |
3.增量发布日志
本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1430935,如需转载请自行联系原作者