java本地增量打包工具_java本地增量打包工具

在打增量包每次都需要将class文件、jsp文件等拷贝到增量包中比较麻烦。所以就写了一个增量打包工具。

工作原理:根据文件的最后修改时间来打增量。

1、查找Java类增量:根据eclipse工程下的.classpath文件中配置的javasrc目录,来查找修改的java文件,然后将其class文件拷贝到增量目录下。

2、查找jsp文件、配置文件,可以自定义配置。

下面为代码:

XmlReadUtil

package com.aspire.bdc.common.utils;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import java.util.Properties;

import org.apache.commons.configuration.ConfigurationException;

import org.apache.commons.configuration.XMLConfiguration;

import org.apache.log4j.Logger;

/**

* This class is used to parse an xml configuration file and return specified value.

*/

public final class XmlReadUtil {

private static final String KEY_CONNECTOR = ".";

private static final String DATA_FILE_NAME = System.getProperty("user.dir") + "/.classpath";

private static final Logger LOGGER = Logger.getLogger(XmlReadUtil.class);

private static XmlReadUtil instance;

private XMLConfiguration xmlConfig;

private XmlReadUtil() {

try {

xmlConfig = new XMLConfiguration(DATA_FILE_NAME);

} catch (ConfigurationException e) {

LOGGER.error(e);

throw new RuntimeException(e);

}

}

public static XmlReadUtil getInstance() {

if (instance == null) {

instance = new XmlReadUtil();

}

return instance;

}

@SuppressWarnings("rawtypes")

public ListgetClasspathEntry() {

List lstSrc = xmlConfig.getList("classpathentry[@kind]");

List listPath = xmlConfig.getList("classpathentry[@path]");

ListlistResult = new ArrayList();

if (listPath != null && !listPath.isEmpty()) {

for (int i = 0; i < listPath.size(); i++) {

if (lstSrc.get(i).equals("src")) {

listResult.add(System.getProperty("user.dir") + File.separator + listPath.get(i));

}

}

}

return listResult;

}

}

IncremenPublish.java

import java.io.File;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

import org.apache.commons.io.FileUtils;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

/**

* 增量打包工具类

*

* @author lipeng

* @since 1.0

* @version 2014-8-19 lipeng

*/

public class IncremenPublish {

private static final Logger logger=Logger.getLogger(IncremenPublish.class);

private ListjavaPath;

private Date lastDate;

private String classPath;

private String webPath;

private String configPath;

private String dbScriptPath;

private static final String tempFileDir = "D:\\patch";

private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

/**

* 构造函数

*

* @param lastDate

* @param webDirName 存放web应用的目录名称,比如说webapps、webContent等

*/

public IncremenPublish(String hour, String webPath, String configPath, String dbScriptPath) {

this.javaPath = XmlReadUtil.getInstance().getClasspathEntry();

this.lastDate = parseDate(hour);

classPath = IncremenPublish.class.getClass().getResource("/").getPath();

classPath = classPath.substring(1, classPath.length() - 1);

if (StringUtils.isNotBlank(webPath)) {

this.webPath = webPath;

} else {

this.webPath = classPath.replace("WEB-INF/classes", "");

}

if (StringUtils.isNotBlank(configPath)) {

this.configPath = configPath;

} else {

this.configPath = System.getProperty("user.dir") + File.separator + "config";

}

if (StringUtils.isNotBlank(dbScriptPath)) {

this.dbScriptPath = dbScriptPath;

} else {

this.configPath = System.getProperty("user.dir") + File.separator + "db_script";

}

}

/**

* 获取增量文件

*

* @Date 2013-11-9

* @author lipeng

*/

public void getIncremenPublishClassFile() {

System.out.println("######################## patch start#####################");

try {

File tempFile = new File(tempFileDir);

FileUtils.deleteDirectory(tempFile);

} catch (Exception e) {

e.printStackTrace();

}

File file = new File(tempFileDir);

if (!file.exists()) {

file.mkdirs();

}

// 获取class增量

System.out.println("**********start class increment**********");

for (String path : javaPath) {

moveIncremenFile(path, "classes", new String(path));

}

System.out.println("**********start jsp increment**********");

moveIncremenFile(webPath, null, webPath);

System.out.println("**********start config increment*********");

moveIncremenFile(configPath, null, configPath);

System.out.println("**********start jsp increment**********");

moveIncremenFile(dbScriptPath, null, dbScriptPath);

System.out.println("######################## patch end #####################");

}

/**

* 获取增量文件

*/

public boolean moveIncremenFile(String javaPath, String dirName, String srcPath) {

try {

File file = new File(javaPath);

if(!file.exists()) return false;

if (!file.isDirectory()&&!file.getAbsolutePath().contains("vssver2")) {

Date fileDate = new Date(file.lastModified());

if (fileDate.getTime() > lastDate.getTime()) {

copyFile(srcPath, file, dirName);

}

} else if (file.isDirectory() && !file.getAbsolutePath().contains("svn")

&& !file.getAbsolutePath().endsWith("WEB-INF")) {

String[] filelist = file.list();

for (int i = 0; i < filelist.length; i++) {

File readfile = new File(javaPath + File.separator + filelist[i]);

if (!readfile.isDirectory()&&!file.getAbsolutePath().contains("vssver2")) {

Date fileDate = new Date(readfile.lastModified());

if (fileDate.getTime() > lastDate.getTime()) {

copyFile(srcPath, readfile, dirName);

}

} else if (readfile.isDirectory()) {

moveIncremenFile(javaPath + File.separator + filelist[i], dirName, srcPath);

}

}

}

} catch (Exception e) {

System.out.println("获取增量文件  Exception:" + e.getMessage());

}

return true;

}

public static void main(String[] args) {

String hour = null;

String webpath = null;

String configPath = null;

String dbScriptPath = null;

if (args.length > 0) {

hour = args[0];

System.out.println("hout:" + hour + "小时");

}

if (args.length > 1) {

webpath = args[1];

System.out.println("webPath:" + webpath);

}

if (args.length > 2) {

configPath = args[2];

System.out.println("configPath:" + configPath);

}

if (args.length > 1) {

dbScriptPath = args[3];

System.out.println("dbScriptPath:" + dbScriptPath);

}

IncremenPublish publish = new IncremenPublish(hour, webpath, configPath, dbScriptPath);

publish.getIncremenPublishClassFile();

}

/**

* parseDate

*

* @Date 2013-11-12

* @author lipeng

* @param strDate

* @return

*/

public static Date parseDate(String hour) {

Date date = null;

if (StringUtils.isBlank(hour) || !hour.matches("[1-9]*")) {

try {

date = format.parse(format.format(new Date()));

} catch (Exception e) {

e.printStackTrace();

}

} else {

date = new Date(new Date().getTime() - 3600 * Integer.parseInt(hour));

}

return date;

}

/**

* 移动增量文件

*

* @Date 2013-11-12

* @author lipeng

* @param file

* @param dirName

*/

private void copyFile(String srcPath, File file, String dirName) {

if (dirName == null) {

copyJspFile(file);

} else {

copyClassFile(srcPath, file, dirName);

}

}

/**

* 迁移class文件

*

* @Date 2013-11-12

* @author lipeng

* @param file

* @param dirName

*/

private void copyClassFile(String srcPath, File file, String dirName) {

File tempJava = new File(srcPath);

String path1 = file.getPath().replace(tempJava.getAbsolutePath(), classPath).replace("java", "class");

File tempFile = new File(path1);

String path2 = path1.replace(classPath, tempFileDir + File.separator + dirName);

File tempFile1 = new File(path2);

tempFile1.getParentFile().mkdirs();

try {

FileUtils.copyFile(tempFile, tempFile1);

} catch (Exception e) {

System.out.println("拷贝class文件出错");

}

logger.info("path=" + path2);

System.out.println("path=" + path2);

}

/**

* 迁移jsp文件

*

* @Date 2013-11-12

* @author lipeng

* @param file

*/

private void copyJspFile(File file) {

String path = file.getPath().replace(System.getProperty("user.dir"), tempFileDir);

File tempFile = new File(path);

tempFile.getParentFile().mkdirs();

try {

FileUtils.copyFile(file, tempFile);

} catch (Exception e) {

System.out.println("拷贝jsp文件出错");

}

System.out.println("path=" + path);

}

}

ant脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值