问答头像

问答

赚客吧旗下问答网站

  • 文章93487
  • 阅读15985

人生倒计时

  • 今日已经过去小时
  • 这周已经过去
  • 本月已经过去
  • 今年已经过去个月
首页 问答 正文内容

公司的这种打包启动方式,我简直惊呆了

问答 问答 2023-01-26 21:30:10 1

前言

大家都知道,SpringBoot应用最终会打出一个FatJar,里面包含了用到的全部依赖,启动也非常简单,java-jarxxx.jar即可win10怎么配置java环境变量。

但是我们公司打出的最终包,将依赖包挪到了外部,然后启动的时候通过loader.path指定依赖包的位置,如java-Dloader.path=libs-jarxxxx的方式启动,也能够启动成功win10怎么配置java环境变量。

这样做最大的一个好处就是如果发现某个依赖出现问题,那么我只需要在libs替换其中某个依赖,影响范围可以减小很多win10怎么配置java环境变量。

那大家是不是很好奇是怎么做到的呢win10怎么配置java环境变量?

打包方式详解

主要是通过两个maven插件打出这样的结构的包win10怎么配置java环境变量。

spring-boot-maven-plugin

该插件是springboot官方提供的一个打包插件,主要用来打出fatjar,并且提供了支持java-jarxxx.jar方式启动win10怎么配置java环境变量。官网地址:docs.spring.io/spring-boot…[1]。

我们需要用这个插件win10怎么配置java环境变量,因为只有它可以打出支持启动的jar,但是打出的包中又不能有依赖,该怎么做呢?如下图:

layout:布局方式,这里要选择ZIP,后面说明原因win10怎么配置java环境变量。

includes:选择包含哪些依赖,这里写了一个不存在的jar,那么也间接实现了不打入其他的依赖win10怎么配置java环境变量。这种方式比较ugly,但是目前没有找到更加合适的方案。

layout:布局方式,这里要选择ZIP,后面说明原因win10怎么配置java环境变量。

includes:选择包含哪些依赖,这里写了一个不存在的jar,那么也间接实现了不打入其他的依赖win10怎么配置java环境变量。这种方式比较ugly,但是目前没有找到更加合适的方案。

maven-assembly-plugin

maven-assembly-plugin插件可以灵活定制打包内容,官网地址:maven.apache.org/plugins/mav…[2]win10怎么配置java环境变量。

我们现在就是想办法利用该插件抽出我们用到的依赖包win10怎么配置java环境变量,该怎么做呢?

win10怎么配置java环境变量我们现在看下assembly.xml中的关键配置:

可以根据include、exclude属性通过正则灵活的抽取相关依赖到指定的目录下

可以根据include、exclude属性通过正则灵活的抽取相关依赖到指定的目录下

最终执行mvncleanpackage在target目录下得到最终的安装包:

解压该安装包:

打开libs目录:

启动方式解析

现在我们已经按照自己想要的结构打出包了win10怎么配置java环境变量,那如何在启动的时候加载libs目录中的依赖呢?

前面提到了springboot插件打出的包是启动的入口,实际上在这个包里面springboot会自动打入一个引导类org.springframework.boot.loader.Launcher,它是SpringBoot可执行jar的主要入口点,它是SpringBootjar文件中的实际Main-Class,用于设置适当的URLClassLoader并最终调用SpringBoot项目中定义的main方法win10怎么配置java环境变量。

Launcher有三个子类(JarLauncher、WarLauncher和PropertiesLauncher),如果我们打包插件的layout配置的是ZIP的方式,它会使用PropertiesLauncherwin10怎么配置java环境变量。

PropertiesLauncher机制说明:

默认情况下,PropertiesLauncher在BOOT-INF/lib/中加载,我们可以通过设置loader.properties中的loader.path或LOADER_PATH环境变量来增加其它的加载位置win10怎么配置java环境变量。

loader.path:配置逗号分隔的Classpath类路径,例如lib,${HOME}/app/lib,前面的路径优先,类似于javac命令中的-classpathwin10怎么配置java环境变量。

loader.home:用于解析loader.path配置的相对路径,默认是${user.dir}win10怎么配置java环境变量。

loader.path:配置逗号分隔的Classpath类路径,例如lib,${HOME}/app/lib,前面的路径优先,类似于javac命令中的-classpathwin10怎么配置java环境变量。

loader.home:用于解析loader.path配置的相对路径,默认是${user.dir}win10怎么配置java环境变量。

所以,打包成功后,我们可以通过java-jar-Dloader.path=xx1,xx2,public<jarName>.jar命令来启动程序,这样对应目录下的依赖均会被加载win10怎么配置java环境变量。

总结

这种打包启动方式虽然不常见,但是还是有一定的价值的,特别是在项目组件模块比较多的时候,出现紧急缺陷,可以按需替换包,将影响范围控制到最小win10怎么配置java环境变量。

如果本文对你有帮助,请随手留下一个赞吧win10怎么配置java环境变量。

如果本文对你有帮助,请随手留下一个赞吧win10怎么配置java环境变量。

[1]

docs.spring.io/spring-boot…:/

[2]

maven.apache.org/plugins/mav…:/

-EOF-

点击标题可跳转

0、极客专属:几十款程序员秒懂的卫衣

1、Meta从Java迁移到Kotlinwin10怎么配置java环境变量,已超1000万行代码…

2、居然还有人不知道如何在IDEA中生成Maven依赖关系图win10怎么配置java环境变量?

3、Java多线程批量操作win10怎么配置java环境变量,居然有人不做事务控制?

看完本文有收获win10怎么配置java环境变量?请分享给更多人

推荐关注「Java开发精选」win10怎么配置java环境变量,提升Java开发技术

点赞和在看就是最大的支持️

文章目录
    搜索