in spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/Repackager.java [101:130]
public void repackage(File destination, Libraries libraries, LaunchScript launchScript, FileTime lastModifiedTime)
throws IOException {
Assert.isTrue(destination != null && !destination.isDirectory(), "Invalid destination");
Layout layout = getLayout(); // get layout early
if (lastModifiedTime != null && layout instanceof War) {
throw new IllegalStateException("Reproducible repackaging is not supported with war packaging");
}
destination = destination.getAbsoluteFile();
File source = getSource();
if (isAlreadyPackaged() && source.equals(destination)) {
return;
}
File workingSource = source;
if (source.equals(destination)) {
workingSource = getBackupFile();
workingSource.delete();
renameFile(source, workingSource);
}
destination.delete();
try {
try (JarFile sourceJar = new JarFile(workingSource)) {
repackage(sourceJar, destination, libraries, launchScript, lastModifiedTime);
}
}
finally {
if (!this.backupSource && !source.equals(workingSource)) {
deleteFile(workingSource);
}
}
}