提高生产力,用代码更新你的jar包
作者:源码世界时间:2014-03-13分类:程序员碎语评论:0浏览:10100
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()); } }