SpringBoot 读取 jar 包中 BOOT-INF/lib 下的 jar包

Springboot 项目一般是以 java -jar 形式运行的,解压后 BOOT-INF/lib 目录下有依赖的所有 jar 包。我的需求是不解压直接读取BOOT-INF/lib 下面的包。

参考这两篇文章后找到了解决方案,代码如下:

 SpringBoot项目读取依赖jar包中的文件https://blog.csdn.net/songzehao/article/details/120560678
Classpath resource not found when running as jarhttps://stackoverflow.com/questions/25869428/classpath-resource-not-found-when-running-as-jar

ClassLoader defaultClassLoader = ClassUtils.getDefaultClassLoader();
try (InputStream inputStream = defaultClassLoader.getResourceAsStream("BOOT-INF/lib/asm-7.1.jar");) {
    File somethingFile = new File("test.jar");
    assert inputStream != null;
    FileUtils.copyInputStreamToFile(inputStream, somethingFile);
} catch (IOException e) {
    throw new RuntimeException(e);
}

接着还有另外一个需求,判断当前运行环境是不是 IDE,只需要在非 IDE 环境下读取 lib 下 jar 包。参考 这两篇文章。两个方法都能满足我的需求,我选择了第一种。代码如下:

 判断 Java 程序的运行方式, file(在IDE中运行) 或 jar(以jar包方式运行)https://blog.csdn.net/mrathena/article/details/124413570

 如何判断当前Java代码是否运行在IDEA内https://blog.csdn.net/monarch91/article/details/124721203

方法一:

ClassLoader defaultClassLoader = ClassUtils.getDefaultClassLoader();
if (Objects.equals(defaultClassLoader.getResource("").getProtocol(), "jar")) {
    System.out.println("jar 包运行");
} else {
    System.out.println("非 jar 包运行");
}

方法二:

try {
    Class.forName("com.intellij.rt.execution.application.AppMainV2");
    System.out.println("in idea");
} catch (ClassNotFoundException ignored) {
    System.out.println("not in idea");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值