楔子
学习时,为了在spring源码上做标注。想编辑mvn自动下载的源码,源码是jar文件无法直接编辑。折中策略 是 1 解压源码并删除 ; 2 重新选择源码文件
解压源码,删除 源码jar。重新选择 打开解压文件
解压删除 可执行jar https://zhuzi51.lanzoui.com/iFuf7qn44yb
使用java -jar execJar-0.0.1-SNAPSHOT.jar -d {spring-*-source.jar目录}
效果
不做操作的源码
操作之后的效果
操作
1 解压源码并删除
import org.junit.jupiter.api.Test;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collection;
/**
* @author study
* @version 1.0
* @date 2021/6/22 17:47
*/
public class ListSpringJar {
@Test
public void listFile() {
// TODO Spring mvn 源码位置
File file = new File("D:\\soft\\apache-maven-3.6.0\\repo\\org\\springframework");
final Collection<File> files = FileUtils.listFiles(file, new String[]{"jar"}, true);
files.stream().parallel().forEach(item -> {
System.out.println(item.getName());
if (item.getName().endsWith("sources.jar")) {
unzip(item.getAbsolutePath(), item.getParentFile().getAbsolutePath() + "/sources");
item.delete();
}
});
}
/**
* 解压Zip文件
*
* @param zipFile 需要解压的zip文件位置
* @param destDir 解压的目标位置
*/
public void unzip(String zipFile, String destDir) {
File f;
try (ArchiveInputStream i = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.ZIP, Files.newInputStream(Paths.get(zipFile)))) {
ArchiveEntry entry;
while ((entry = i.getNextEntry()) != null) {
if (!i.canReadEntryData(entry)) {
continue;
}
f = new File(destDir, entry.getName());
if (entry.isDirectory()) {
if (!f.isDirectory() && !f.mkdirs()) {
throw new IOException("failed to create directory " + f);
}
} else {
File parent = f.getParentFile();
if (!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("failed to create directory " + parent);
}
try (OutputStream o = Files.newOutputStream(f.toPath())) {
IOUtils.copy(i, o);
}
}
}
} catch (IOException | ArchiveException e) {
e.printStackTrace();
}
}
}
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.20</version>
</dependency>