首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

SpringBoot打包部署解析:jar生成和结构

它与传统 jar 包最大不同是包含了一个 lib 目录和内嵌了 web 容器(以下均以 tomcat 为例)。 jar 包通 常是集成 pom.xml 文件 maven 插件来生成。...在打包时候默认使用是 repackage。...RepackageMojo 就是 提供重新打包现有的 jar 或 war 包文件,使得它们可以使用 javajar 来进行启动。 RepackageMojo execute 方法如下。...很显然,使用了相同实现来处理 ZIP 文件和 DIR 文件。 jar 类型为 Layouts 内部类,可以简单看一下 jar 类型处理都包含 了哪些内容。...JarLauncher 位 于 spring-boot-loader 项目中, jar org 目录便存储着 Launcher 相关 class 文件。

1.4K30

SpringBoot系列-- jar可执行原理

spring-boot-maven-plugin SpringBoot 可执行jar包又称fat jar ,是包含所有第三方依赖 jar 包,jar嵌入了除 java 虚拟机以外所有依赖,是一个...普通插件maven-jar-plugin生成包和spring-boot-maven-plugin生成包之间直接区别,是fat jar主要增加了两部分,第一部分是lib目录,存放是Maven依赖...构造时候会解析内部结构,去获取jar包里各个文件或文件夹。我们可以看一下该类注释。...包依赖所有和资源,将该urls参数传递给父java.net.URLClassLoader,java.net.URLClassLoader#findClass执行查找方法,该类查找来源即构造方法传递进来...,这里使用了2个URL,分别对应jar依赖包spring-boot-loader和spring-boot,使用 "!

90210

Mac配置gradle环境及使用android studio打包jar包与arr包方法

前言 Mac中用android studio 导出jar包最重要是需要配置gradle ,它包导出也是通过gradle命令进行。...所以,如果想成功打包,要先配置好gradle环境,这样你才可以android studioterminal中直接使用gradle命令了。下面话不多说了,来一起看看详细介绍吧。...1.在你需要打包modulebuilde.gradle文件 将 apply plugin: 'com.android.application' application 改成 library...,并注释掉 applicationId 这一行 2.build.gradle文件添加下面容(内容和android{……}模块平级,不要加到android 模块中去了): task clearJar...) { baseName 'sdk' //指定生成jar名 //从哪里打包class文件,这个是你module中生成class文件,如果没有classes文件夹,不妨先运行下你应用 from

2.6K20

SpringBoot - 探究Spring Boot应用是如何通过java -jar 启动

使用-jar参数时,后面的参数是的jar 【spring-0.0.1-SNAPSHOT.jar】,该jar文件包含是class和资源文件; manifest文件中有Main-Class定义;Main-Class...spring-boot-maven-plugin默认有5个goals:repackage、run、start、stop、build-info。在打包时候默认使用是repackage。...spring-boot-maven-pluginrepackage代码层面调用了RepackageMojoexecute方法,而在该方法又调用了repackage方法。...,将maven生成jar重新打包成可执行jar Repackager repackager = getRepackager(source.getFile()); // 查找并过滤项目运行时依赖...而在SpringBoot打包fatJar,则是使用后者JarFileArchive ---- JarFile JarFile:对jar封装,每个JarFileArchive都会对应一个JarFile

1.4K30

SpringBoot 核心模块原理剖析

spring-boot-autoconfigure 模块 Spring出现给我们管理 Bean 依赖注入提供了便捷,但是当我们需要使用通过 pom 引入 jar 里面的一个 Bean 时候,还是需要手动...spring-boot-loader 模块 Java 原生加载器局限及改进思路 Java 每种 ClassLoader 都会去自己规定路径下查找字节码文件并加载到内存(可以参考《Java 加载器揭秘...如上图 Application 假设为含有 main 函数,之前是直接使用 AppClassLoader 进行加载,那么现在我们先使用 APPClassLoader 加载 Launcher ,该类内部创建一个...首先在打包时候会使用 spring-boot-maven-plugin 插件重写打成 jar 文件,会设置META-INF/MANIFEST.MF Main-Class:org.springframework.boot.loader.JarLauncher...spring-boot-maven-plugin 插件打包流程分析 SpringBoot 应用打包时候需要引入如下 Maven 插件才会生成上面介绍结构 jar

1.5K90

spring boot 使用maven和fat jarwar运行应用程序对比

Spring Boot Maven Plugin 上篇文章我们提到了Spring Boot Maven Plugin,通过使用该插件,可以有效提高部署效率,并打包成为fat jar/war包。...在打包成fat jar/war包时候,背后实际上做了如下事情: 管理了classpath配置,这样我们在运行java -jar时候不用手动指定-cp 。...通过manifest自动查找main() ,这样我们就不需要在java -jar手动指定main方法。...使用Maven命令来运行应用程序 要使用maven命令来运行应用程序可以程序根目录下面执行: mvn spring-boot:run 它会自动下载所需要依赖,并运行,运行日志如下: mvn spring-boot...如果想打包成fat jar/war, 需要使用Maven Spring Boot plugin,如下所示,否则打包出来jar包并不包含外部依赖:

1.4K10

SpringBoot之spring-boot-load模块

[Jar|War]Launcher固定去查找当前jarlib目录里面的嵌套jar文件里面的资源。...首先在打包时候会使用spring-boot-maven-plugin插件重写打成jar文件,会设置META-INF/MANIFEST.MF Main-Class: org.springframework.boot.loader.JarLauncher...三、spring-boot-maven-plugin插件打包流程分析 ?...image.png 看完这个流程分析下第三节留问题,如流程图首先使用Appclassloader加载了JarLauncher并创建了LaunchedURLClassLoader,而LaunchedURLClassLoader...五、总结 spring-boot-load模块通过自定义jar包结构自定义加载器优雅实现了嵌套jar资源加载,通过打包时候重新设置启动和组织jar结构,通过运行时设置自定义加载器来实现嵌套jar

1.1K20

【Groovy】Groovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展 | 打包静态扩展字节码到 jar | 测试使用 Thread 静态扩展 )

文章目录 一、扩展方法示例 二、静态扩展方法配置 三、编译静态扩展 四、打包静态扩展字节码到 jar 五、测试使用 Thread 静态扩展 一、扩展方法示例 ---- 为 Thread 扩展...静态扩展方法 ; 配置完成后项目结构如下 : 三、编译静态扩展 ---- Terminal 面板 , 执行 cd src/main/groovy 命令 , 进入到 src/main/groovy...定义了 Thread 扩展方法 ; 编译过程及结果如下 : 四、打包静态扩展字节码到 jar ---- 执行 jar -cf thread.jar -C classes ....命令 , 将 classes 字节码文件按照 manifest/ 规则 , 打包到 thread.jar 文件 ; 五、测试使用 Thread 静态扩展 ---- 创建一个 Groovy 脚本..., 执行为 Thread 扩展静态方法 hello 方法 ; Thread.hello{ printf "Hello" } Terminal 面临 , 使用命令行执行该 Groovy

1K20

SpringBoot从0到实战5:项目是如何通过jar包启动?

对于SpringBoot项目,我们会在pom.xml文件添加打包插件spring-boot-maven-plugin,那么执行打包时候,会生成相应jar文件,比如: spring-boot-hello...MANIFEST.MF; 2、把依赖jar包进行打包jar包里打包进去了别的jar包,这样jar成为fat jar,也叫作uber jar。...使用百度翻译如下: 使用-jar参数时,后面的参数是jar文件名称(本例子是spring-boot-hello-0.0.1-SNAPSHOT.jar),该jar文件包含是class和资源文件;...1)加载jarjar文件以及class文件; (2)启动main方法; 对于main方法启动注解@SpringBootApplication注解是相应jar,很显然不能直接先启动...classloader来完成,java内置classloader不能满足要求,也就需要Spring Boot自定义ClassLoader来搞定这个事情了,也就是JarLauncher是一个自定义加载器

9110

Spring Boot Maven Plugin打包异常及三种解决方法:Unable to find main class

【背景】spring-boot项目,打包成可执行jar,项目内有两个带有main方法并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在都没有使用...清单文件Main-Classlayout控制   这里Start-Class就是我们配置,而Main-Class受layout属性控制,别被名字搞乱了(是不是很诡异...来张图直观感受下,对应使用上面xml配置打包清单文件(MANIFEST.MF): ?   layout属性默认不需要配置,插件会自动推断。...简单点说,这货重新打包个可执行jar/war,可以命令行使用-jar执行。如果指定layout为NONE那就没有主只是打个普通jar(不可执行),一般不会这么做。   ...一般情况,这个目标会打一个新jar/war,并把maven默认打的jar/war添加.original后缀,target目录下可以看到: ?

14.2K20

深入Spring Boot (十四):jarwar打包解决方案

基于SpringBoot开发项目代码可以打包成可执行jar,也可以打包成war,这个视不同需求而定,下面以SpringBoot2.4.0版本为例,分别列举了不同使用方式下jar和war打包操作。...jar,需要在pom配置packaging=jar,就是下面这样: jar 接着,使用finalName标签配置最终jar名字,然后配置spring-boot-maven-plugin... 以上就是pom配置了,接下来执行jar打包操作,如果使用IDEA图形化工具打包...,接下来执行jar打包操作,如果使用IDEA图形化工具打包,双击执行Maven窗口下Lifecyclepackage,即执行打jar包;如果想通过执行mvn指令打jar,需要cd到源码根目录,即pom.xml...因为spring-boot-starter-parent pom.xml已经帮我们管理好了打包需要用到spring-boot-maven-plugin插件和它需要依赖其它插件,所以通过继承可以直接使用

2.1K30

企业都在用 spring boot 打包插件,真的超好用!

这个插件,它是继承父工程 spring-boot-starter-parent spring-boot-maven-plugin 插件,父 pom spring-boot-maven-plugin...如果在项目 pom 文件,没有继承 spring-boot-starter-parent 的话,那么 spring-boot-maven-plugin 插件就没有了继承关系,所以只能自己手动指定主加载...三、后续 但是使用过程,我发现修改 conf 里面的 yml 配置文件没有生效: ? ? 经过排查之后才发现,生成 jar 包文件,有相关 yml 文件,所以修改 conf 目录才会不生效。...四、总结 1、如果需要打成可执行 jar 包的话,可以使用 spring boot 打包插件:spring-boot-maven-plugin 。...2、不过还是推荐第二种打包方式,因为使用很方便,特点如下: 可以将 jar 包操作脚本写入到 bin 目录下,方便程序启动与停止。

1.7K10

Spring Boot应用打包和部署

接下来我们基于之前练习使用应用程序,看看如何构建Spring Boot Uber JAR。...Note:Uber JAR是将应用程序打包到单独jar,该jar包包含了应用程序依赖所有库和二进制包。...运行Jar启动Java web应用 分析 如上所示,打包成可执行jar包这种方法相当直观,背后工作spring-boot-maven-plugin插件实现:先通过maven-shade-plugin...生成一个包含依赖jar,再通过spring-boot-maven-plugin插件把spring boot loader相关,还有MANIFEST.MF打包jar里。...总结下Spring Boot应用启动流程:(1)spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖jar包,还有Spring boot loader相关;(2)Fat

63330

Spring Boot - 瘦身大作战:优雅应对Spring Boot Fat Jar

Boot任何Launcher NONE,将所有的依赖库打包,但是不打包Spring Boot任何Launcher 打包后观察下 jar大小 和 里面的内容 重点关注下Main-Class...org.springframework.boot.loader.Launcher是特殊引导程序,用作可执行jar主要入口点。...它们目的是从目录嵌套jar文件或war文件(而不是路径显式文件)加载资源(.class文件等)。 对于JarLauncher和WarLauncher,嵌套路径是固定。...如果需要,可以在这些位置添加额外罐子。 默认情况下,PropertiesLauncher应用程序存档BOOT-INF / lib /查找。...可以通过loader.properties(这是目录,归档文件或归档文件目录逗号分隔列表)设置一个称为LOADER_PATH或loader.path环境变量来添加其他位置 概括一下: 启动器

36810

OpenTelemetry agent 对 Spring Boot 应用影响:一次 SPI 失效调查

以前写过一个 http 框架 cicada,其中有一个可拔插 IOC 容器功能: 就是可以自定义实现自己 IOC 容器,将自己实现 IOC 容器打包为一个第三方包加入到依赖,cicada 框架就会自动使用自定义...ServiceLoader 中会会去查找 META-INF/services 文件,然后解析其中内容从而反射生成对应接口对象。...这里还有一个关键是通常我们代码都会打包为一个 JAR 包,加载器需要加载这个 JAR 包,同时需要在这个 JAR 包里找到我们之前定义那个 spi 文件,如果这里查不到文件那就认为没有定义 SPI...这是不配置 agent 时候使用 classLoader: 使用这个 loader 是可以通过文件路径 jar查找到我们配置文件。...初步判断使用 opentelemetry-javaagent.jar agent 之后,它加载器优先于了 spring boot ,从而导致后续加载失败。

8910
领券