IDEA 查看并编辑源码

楔子

学习时,为了在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>

在这里插入图片描述

2 重新选择源码

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值