สมมติว่าโครงสร้างไดเร็กทอรีเป็นโครงสร้างมาตรฐานของ maven
คัดลอกรหัสรหัสดังต่อไปนี้:
-src
-เป้า
-test.jar (แพ็คเกจ jar ที่คุณต้องอัปเดต)
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจ com.foo.common.base.utils.development;
นำเข้า org.junit.Assert.*;
นำเข้า java.io.File;
นำเข้า java.io.IOException;
นำเข้า java.util.Date;
นำเข้า java.util.Properties;
นำเข้า org.apache.commons.io.FileUtils;
นำเข้า org.junit.Test;
นำเข้า org.slf4j.Logger;
นำเข้า org.slf4j.LoggerFactory;
นำเข้า org.springframework.core.io.ClassPathResource;
JarUpdater คลาสสาธารณะ {
คนตัดไม้ Logger สุดท้ายคงที่สาธารณะ = LoggerFactory
.getLogger(JarUpdater.class);
@ทดสอบ
-
* อัปเดตไฟล์ทั้งหมดในไดเร็กทอรี com เป็นโครงสร้างไดเร็กทอรีที่สอดคล้องกันของ jar
-
* การอัปเดตโค้ดสำเร็จ เรายืนยันว่าขนาดของขวดแตกต่างกัน
-
โมฆะสาธารณะ updateClass () พ่น IOException, InterruptedException {
ClassPathResource myPath = ClassPathResource ใหม่ (
"jarUpdaterConfig.properties");
คุณสมบัติ p = คุณสมบัติใหม่ ();
p.load(myPath.getInputStream());
ClassUpdater classUpdater = ใหม่ ClassUpdater().applySettings(p);
classUpdater.compileAndCopyClass();
สตริงworkingDirectory = p.getProperty("workingDirectory");
สตริง jar4UpdateName = p.getProperty("jar4UpdateName");
// เส้นทางการคอมไพล์คลาส
สตริง updateSourcePath =workingDirectory + "เป้าหมาย";
// โฟลเดอร์รูทคลาส
สตริง updateSourceDir = "com";
วันที่ startDate = วันที่ใหม่ ();
ไฟล์ myJar = ไฟล์ใหม่ (workingDirectory + jar4UpdateName);
ถ้า (!myJar.isFile()) {
logger.error("ไม่มีไฟล์ที่มีพาธต่อไปนี้ {}",
jar4UpdateName);
กลับ;
-
oldLength ยาว = myJar.length();
logger.info("ตอนนี้พร้อมที่จะอัพเดตไฟล์ jar ด้วยชื่อ:{},ขนาด:{}",
myJar.getName(), myJar.length());
สตริง myCommand = "jar uf " +workingDirectory + jar4UpdateName
+ " -C " + updateSourcePath + " " + updateSourceDir;
logger.info("อัพเดตคำสั่ง【{}】", myCommand);
Runtime.getRuntime().exec(myCommand);
ในขณะที่ (!FileUtils.isFileNewer(myJar, startDate)) {
logger.info("หลับสองวินาที,ตรวจสอบการเปลี่ยนแปลง...");
Thread.sleep (2000);
-
ยืนยันไม่เท่ากับ(
"jar อาจอัปเดตไม่สำเร็จ โปรดตรวจสอบโค้ด",
oldLength, myJar.length());
logger.info("ตอนนี้เสร็จสิ้นการอัพเดตไฟล์ jar ด้วยขนาด:{}", myJar.length());
-
-