提高生产力,用代码更新你的jar包

作者:源码世界时间:2014-03-13分类:程序员碎语评论:0浏览:5888
package com.foo.common.base.utils.development;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;

public class JarUpdater {
	public static final Logger logger = LoggerFactory
			.getLogger(JarUpdater.class);

	@Test
	/**
	 * 更新com目录下的所有文件到jar的对应目录结构中去
	 * 
	 * 一次成功的代码更新,我们断言jar的大小是不一样的
	 */
	public void updateClass() throws IOException, InterruptedException {

		ClassPathResource myPath = new ClassPathResource(
				"jarUpdaterConfig.properties");
		Properties p = new Properties();
		p.load(myPath.getInputStream());

		ClassUpdater classUpdater = new ClassUpdater().applySettings(p);

		classUpdater.compileAndCopyClass();

		String workingDirectory = p.getProperty("workingDirectory");
		String jar4UpdateName = p.getProperty("jar4UpdateName");
		// class compile path
		String updateSourcePath = workingDirectory + "target";
		// class root folder
		String updateSourceDir = "com";

		Date startDate = new Date();

		File myJar = new File(workingDirectory + jar4UpdateName);
		if (!myJar.isFile()) {
			logger.error("file with following path {} does not exist.",
					jar4UpdateName);
			return;
		}
		long oldLength = myJar.length();
		logger.info("Now ready to update jar file with name:{},size:{}",
				myJar.getName(), myJar.length());
		String myCommand = "jar uf " + workingDirectory + jar4UpdateName
				+ " -C " + updateSourcePath + " " + updateSourceDir;
		logger.info("Update command【{}】", myCommand);

		Runtime.getRuntime().exec(myCommand);

		while (!FileUtils.isFileNewer(myJar, startDate)) {
			logger.info("sleep for two seconds,checking changes...");
			Thread.sleep(2000);
		}
		assertNotEquals(
				"jar may not be updated successfully,check the code please",
				oldLength, myJar.length());
		logger.info("Now finish update jar file with size:{}", myJar.length());
	}
}
标签:Java  
返回顶部
分享按钮