欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用代碼更新你的jar包

 更新時(shí)間:2014年01月22日 09:07:05   作者:  
這篇文章主要介紹了用程序代碼更新com目錄下的所有文件到j(luò)ar的對應(yīng)目錄結(jié)構(gòu)中去,這樣可以做到自動(dòng)更新程序吧

假設(shè)目錄結(jié)構(gòu)是maven標(biāo)準(zhǔn)結(jié)構(gòu)

復(fù)制代碼 代碼如下:

-src
-target
-test.jar(你需要更新的jar包)

復(fù)制代碼 代碼如下:

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目錄下的所有文件到j(luò)ar的對應(yīng)目錄結(jié)構(gòu)中去
  *
  * 一次成功的代碼更新,我們斷言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());
 }
}

相關(guān)文章

  • 使用Idea連接MySQL的詳細(xì)步驟總結(jié)

    使用Idea連接MySQL的詳細(xì)步驟總結(jié)

    今天給大家?guī)淼氖顷P(guān)于IDEA連接數(shù)據(jù)庫的問題,文章圍繞著使用Idea連接MySQL的詳細(xì)步驟展開,文中有非常詳細(xì)的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • java WebSocket客戶端斷線重連的實(shí)現(xiàn)方法

    java WebSocket客戶端斷線重連的實(shí)現(xiàn)方法

    在工作中是否會(huì)遇到實(shí)用websocket客戶端連接服務(wù)端的時(shí)候,網(wǎng)絡(luò)波動(dòng),服務(wù)端斷連的情況,本文可以直接使用的斷線重連,感興趣的可以了解一下
    2021-10-10
  • Dwr3.0純注解(純Java Code配置)配置與應(yīng)用淺析一之零配置文件化

    Dwr3.0純注解(純Java Code配置)配置與應(yīng)用淺析一之零配置文件化

    Dwr對我來說最重要的功能點(diǎn)就是反向Ajax調(diào)用,通俗來將就是后端可以直接調(diào)用前端的JS方法(只要在所能訪問的范圍內(nèi)),這也就是Dwr的真正來由,當(dāng)然它也有最基本的前端直接調(diào)用后端的特性,省去了我們經(jīng)常的一般Ajax調(diào)用
    2016-04-04
  • 關(guān)于java中線程安全問題詳解

    關(guān)于java中線程安全問題詳解

    最近工作中遇到不少多線程問題,但自己一直對多線程的理解比較表層,所以深入研究了一番,下面這篇文章主要給大家介紹了關(guān)于java中線程安全問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • spring使用redis操作key-value的示例代碼

    spring使用redis操作key-value的示例代碼

    這篇文章主要介紹了spring使用redis操作key-value的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • JPA如何使用nativequery多表關(guān)聯(lián)查詢返回自定義實(shí)體類

    JPA如何使用nativequery多表關(guān)聯(lián)查詢返回自定義實(shí)體類

    這篇文章主要介紹了JPA如何使用nativequery多表關(guān)聯(lián)查詢返回自定義實(shí)體類,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Java中HashSet和TreeSet的區(qū)別

    詳解Java中HashSet和TreeSet的區(qū)別

    這篇文章主要介紹了詳解Java中HashSet和TreeSet的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解spring cloud config實(shí)現(xiàn)datasource的熱部署

    詳解spring cloud config實(shí)現(xiàn)datasource的熱部署

    這篇文章主要介紹了詳解spring cloud config實(shí)現(xiàn)datasource的熱部署,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • springmvc請求轉(zhuǎn)發(fā)和重定向問題(攜帶參數(shù)和不攜帶參數(shù))

    springmvc請求轉(zhuǎn)發(fā)和重定向問題(攜帶參數(shù)和不攜帶參數(shù))

    這篇文章主要介紹了springmvc請求轉(zhuǎn)發(fā)和重定向問題(攜帶參數(shù)和不攜帶參數(shù)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Project?Reactor?響應(yīng)式范式編程

    Project?Reactor?響應(yīng)式范式編程

    這篇文章主要為大家介紹了Project?Reactor?響應(yīng)式范式編程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論