用代码更新你的jar包

时间:2023-09-19 23:01:04 

假设目录结构是maven标准结构

-src
-target
-test.jar(你需要更新的jar包)
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());
 }
}

标签:jar
0
投稿

猜你喜欢

  • java快速生成数据库文档详情

    2023-11-10 05:25:20
  • Mybatis-Plus sum聚合函数及按日期查询并求和的方式详解

    2022-07-09 12:58:07
  • C#中文件名或文件路径非法字符判断方法

    2023-12-01 14:14:21
  • 基于Java解决华为机试之字符串加解密 

    2022-10-12 17:32:39
  • springboot2启动时执行,初始化(或定时任务)servletContext问题

    2022-10-18 13:14:30
  • C#将PPT文件转换成PDF文件

    2022-09-08 20:33:21
  • 使用spring框架中的组件发送邮件功能说明

    2022-12-29 03:53:55
  • Java面试题冲刺第二十六天--实战编程

    2023-05-22 16:01:54
  • 一文理解kafka rebalance负载均衡

    2022-12-02 10:35:22
  • 浅谈Java锁机制

    2022-01-09 00:58:56
  • Java8新特性之默认方法和静态方法

    2021-08-29 13:34:26
  • 彻底解决tomcat中文乱码问题方案

    2023-06-25 17:24:46
  • Java 中的 clone( ) 和 new哪个效率更高

    2023-11-09 05:27:44
  • RecylerView实现流布局StaggeredGridLayoutManager使用详解

    2023-04-30 20:51:38
  • Java中的线程生命周期核心概念

    2021-10-14 13:37:54
  • Android网格视图GridView的使用

    2023-06-12 20:27:33
  • Java中ArrayList与顺序表的定义与实现方法

    2022-06-08 03:27:12
  • C#中dotnetcharting的用法实例详解

    2023-07-08 07:42:35
  • Android程序美化之自定义ListView背景的方法

    2023-12-13 17:52:57
  • Java的System.getProperty()方法获取大全

    2023-11-10 20:12:12
  • asp之家 软件编程 m.aspxhome.com