Supongamos que la estructura del directorio es la estructura estándar de Maven.
Copie el código de código de la siguiente manera:
-src
-objetivo
-test.jar (el paquete jar que necesitas actualizar)
Copie el código de código de la siguiente manera:
paquete com.foo.common.base.utils.development;
importar org.junit.Assert.* estático;
importar java.io.File;
importar java.io.IOException;
importar java.util.Fecha;
importar java.util.Properties;
importar org.apache.commons.io.FileUtils;
importar org.junit.Test;
importar org.slf4j.Logger;
importar org.slf4j.LoggerFactory;
importar org.springframework.core.io.ClassPathResource;
clase pública JarUpdater {
registrador final estático público logger = LoggerFactory
.getLogger(JarUpdater.clase);
@Prueba
/**
* Actualice todos los archivos en el directorio com a la estructura de directorio correspondiente del jar
*
* Una actualización de código exitosa, afirmamos que el tamaño del frasco es diferente
*/
updateClass nula pública () lanza IOException, InterruptedException {
ClassPathResource miPath = nuevo ClassPathResource(
"jarUpdaterConfig.properties");
Propiedades p = nuevas Propiedades();
p.load(myPath.getInputStream());
ClassUpdater classUpdater = nuevo ClassUpdater().applySettings(p);
classUpdater.compileAndCopyClass();
String directorio de trabajo = p.getProperty("directorio de trabajo");
Cadena jar4UpdateName = p.getProperty("jar4UpdateName");
// ruta de compilación de la clase
String updateSourcePath = directorio de trabajo + "destino";
// carpeta raíz de clase
Cadena updateSourceDir = "com";
Fecha fecha de inicio = nueva fecha();
Archivo myJar = nuevo archivo (workingDirectory + jar4UpdateName);
if (!myJar.isFile()) {
logger.error("el archivo con la siguiente ruta {} no existe.",
jar4NombreActualización);
devolver;
}
long oldLength = myJar.length();
logger.info("Ahora listo para actualizar el archivo jar con nombre:{},tamaño:{}",
miJar.getName(), miJar.length());
String myCommand = "jar uf " + directorio de trabajo + jar4UpdateName
+ " -C " + updateSourcePath + " " + updateSourceDir;
logger.info("Actualizar comando【{}】", myCommand);
Runtime.getRuntime().exec(myCommand);
while (!FileUtils.isFileNewer(myJar, fecha de inicio)) {
logger.info("dormir durante dos segundos, comprobando cambios...");
Hilo.sleep(2000);
}
afirmarNoEquals(
"Es posible que el jar no se haya actualizado correctamente; verifique el código, por favor",
oldLength, myJar.length());
logger.info("Ahora finalice la actualización del archivo jar con tamaño:{}", myJar.length());
}
}