Spring Boot 项目打包 boot-inf 文件夹的问题 spring-boot maven打包,一般pom.xml文件里会加 org.springframework.boot... spring-boot-maven-plugin 这样打的jar里会多一个目录BOOT-INF。...configuration> true Spring Boot Maven插件打包后,包内没有BOOT-INF...目录 使用maven插件打包后,发现包很小100来kb,显然是不对,包内缺少BOOT-INF目录,BOOT-INF是用于存放引用的外部lib的,所以缺少,打出来的包根本不能运行: 解决办法: 在自己项目的
今天创建了一个SpringBoot项目A,打成jar后,在另一项目B中依赖A项目,因为A项目打包后出现了BOOT-INF文件夹 ?...而我们的源码被放在了BOOT-INF中,造成我们在B项目中虽然添加了依赖,但是import类的时候出错。 这时我们只需要在A项目的pom中添加如下配置即可 ?
org.cloudfoundry.springboot", "version": "v1.0.88" }, "metadata": { "classes": "BOOT-INF.../classes/", "classpath": [ "/workspace/BOOT-INF/classes", "/workspace/BOOT-INF/...lib/attoparser-2.0.5.RELEASE.jar", "/workspace/BOOT-INF/lib/classmate-1.4.0.jar", "/workspace.../BOOT-INF/lib/hibernate-validator-6.0.18.Final.jar", "/workspace/BOOT-INF/lib/jackson-annotations...-2.9.10.jar", ... ], "lib": "BOOT-INF/lib/", "start-class": "io.buildpacks.example.sample.SampleApplication
/BOOT-INF/lib/jackson-module-parameter-names-2.9.10.jar!.../BOOT-INF/lib/micrometer-registry-elastic-1.1.18.jar!.../BOOT-INF/lib/spring-boot-actuator-2.1.17.RELEASE.jar!.../BOOT-INF/lib/spring-boot-starter-2.1.17.RELEASE.jar!.../BOOT-INF/lib/spring-security-web-5.1.12.RELEASE.jar!
project.basedir}/lib/eis_protobuf.jar springboot-maven-plugin打包的第一级目录为Boot-INF...,如果不做任何配置,直接mvn clean package会发现无法把本地的jar打进Boot-INF中,则此时要做如下配置 方法一 在pom.xml的resources节点添加如下内容 lib BOOT-INF/lib/...exclusion> 3、修改打包插件,不使用spring-boot-maven-plugin插件打包,因为这个打包插件会把jar打包在Boot-INF
但这种方式存在明显缺陷: 无法识别嵌套在JAR中的JAR文件 不能处理BOOT-INF/classes和BOOT-INF/lib的特殊目录结构 缺乏对Spring Boot分层部署模型的支持 想象一个场景...它的核心能力包括: 嵌套JAR识别:通过特殊协议"jar:nested:"识别并加载位于BOOT-INF/lib/下的依赖JAR 资源定位优化:优先从BOOT-INF/classes加载应用自身类文件.../BOOT-INF/lib/dependency.jar!.../classes +-BOOT-INF/lib/spring-core-6.1.0.jar +-BOOT-INF/lib/hibernate-validator-8.0.0.jar 与标准类加载器的对比.../lib/下的依赖包,无需解压 资源隔离:应用类(BOOT-INF/classes)与依赖库(BOOT-INF/lib)形成逻辑隔离 优先级控制:确保应用类优先于依赖库中的同名类加载 这种设计解决了传统
/BOOT-INF/lib/fastjson-1.2.58.jar!.../BOOT-INF/lib/fastjson-1.2.58.jar!.../BOOT-INF/lib/fastjson-1.2.58.jar!.../BOOT-INF/lib/fastjson-1.2.58.jar!.../BOOT-INF/lib/fastjson-1.2.58.jar!
. ├── BOOT-INF │ └── classes │ └── bootstrap.properties └── 你的.jar 3 directories, 2 files zip.../BOOT-INF/classes/bootstrap.properties ..../BOOT-INF/classes/bootstrap.properties 结果 zanglikun@zanglikundeMacBook-Pro 2024-06 % zip -u 目标.jar ..../BOOT-INF/classes/bootstrap.properties ..../BOOT-INF/classes/bootstrap.properties updating: BOOT-INF/classes/bootstrap.properties (deflated 59%)
/ BOOT-INF/classes/ BOOT-INF/classes/com/ BOOT-INF/classes/com/ricky/ META-INF/maven/ META-INF/maven/...BOOT-INF/lib/log4j-api-2.10.0.jar BOOT-INF/lib/jul-to-slf4j-1.7.25.jar BOOT-INF/lib/javax.annotation-api...-2.9.5.jar BOOT-INF/lib/jackson-annotations-2.9.0.jar BOOT-INF/lib/jackson-core-2.9.5.jar BOOT-INF/lib....jar BOOT-INF/lib/tomcat-embed-el-8.5.29.jar BOOT-INF/lib/tomcat-embed-websocket-8.5.29.jar BOOT-INF/...-3.3.2.Final.jar BOOT-INF/lib/classmate-1.3.4.jar BOOT-INF/lib/spring-web-5.0.5.RELEASE.jar BOOT-INF/
Maven 在构建过程中会将这些文件从 target/classes 目录中复制到 JAR 包的 BOOT-INF/classes 目录。...3.2 BOOT-INF/classes 目录 Spring Boot 的 JAR 包内部结构包括: BOOT-INF/classes:这是应用程序的类和资源文件所在的目录。...BOOT-INF/lib:这个目录包含应用程序的所有依赖 JAR 文件,Spring Boot 会将这些 JAR 文件作为应用程序的依赖进行加载。...Spring Boot 启动过程: Spring Boot 会自动识别 JAR 包中的 BOOT-INF/classes 目录,并将其作为类路径加载。...最终打包为 JAR 文件时,资源文件会被放置在 BOOT-INF/classes 目录下,这与传统 JAR 文件的结构不同。
但是通过maven构建的jar包含 \BOOT-INF\lib\下的所有依赖jar包,导致jar包文件太大。 本文将lib文件夹下所依赖的jar包分离出来,解决文件过大问题。...二、jar包分离实施步骤 (1)按照正常的springboot项目打包方式,对项目进行打包package,其打包后目录如下: |--META-INF |--BOOT-INF |--classes...找到\BOOT-INF\lib文件夹,将lib文件夹复制出来,后续使用。...其中\BOOT-INF\lib目录下存放着所有的依赖jar包,ojdbc8-19.8.0.0.jar / lombok-1.18.16.jar / spring-boot-2.4.1.jar … 占用了大量的空间
解压XXX.jar包,然后把我们的扩展包dubbo-ext.jar 扔到 BOOT-INF/lib中; 然后重新打包; 这种方式应该是也可以实现的; 但是却比较繁琐;这里推荐第二种方式 使用命令...jar -uf0 XXX.jar BOOT-INF/lib/ 直接将我们的扩展包dubbo-ext.jar直接放到XXX.jar中的 BOOT-INF/lib/中; 下面我们具体详细讲一下这个操作步骤...那么这个BOOT-INF/lib就是我们的目标路径; Ok,知道了路径,我们把刚刚解压之后的文件全部删除掉;(只是解压出来看看路径而已) 在当前路径创建目标文件路径 mkdir -p BOOT-INF...执行命令jar -uf0 features-service-0.0.1-SNAPSHOT.jar BOOT-INF/lib/ 执行这条命令的路径一定要对;就在BOOT-INF文件夹同级别 ?...参考文章 springBoot项目不重新上传jar包,增量升级步骤 更新spring boot jar包中的BOOT-INF/lib目录下的jar包
解决办法 方案一 先看下当前目录哈 ├── BOOT-INF │ └── lib │ └── a.jar └── application.jar ZIP命令: zip -0 application.jar.../BOOT-INF/lib/a.jar 或者 zip -0 application.jar ./BOOT-INF/lib/a.jar ..../BOOT-INF/lib/a.jar 最后一定要出现 stored 才算成功哦! zanglikun@MacBook-Pro-2 target % zip -0 application.jar ..../BOOT-INF/lib/a.jar updating: BOOT-INF/lib/a.jar (stored 0%) 方案二 winrar可视化工具,拖拽文件有一个选项 压缩模式 选择 存储 即可!
而我们项目的启动类SpringBootDemoApplication定义在Start-Class属性中, JarLauncher会将BOOT-INF/classes下的类文件和BOOT-INF/lib下依赖的...关于 jar 官方标准说明请移步 JAR File Specification JAR (file format) SpringBoot的jar包,会有3个文件夹: BOOT-INF:存放自己编写并编译好的.../ Spring-Boot-Lib: BOOT-INF/lib/ Build-Jdk-Spec: 1.8 Spring-Boot-Version: 2.4.0 Created-By: Maven Jar...entry.getName().equals("BOOT-INF/classes/") : entry.getName().startsWith("BOOT-INF/lib/")); }...location : "BOOT-INF/classpath.idx"; } protected boolean isPostProcessingClassPathArchives() {
==BOOT-INF==:包含class文件和依赖jar==META-INF==:包含Class-Path:指定执行运行jar时的classpath;Main-Class:指定运行时的main方法所在类...==org==:包含springboot一些文件==BOOT-INF==:包含class文件和依赖jar==META-INF==:包含Class-Path:指定执行运行jar时的classpath;Main-Class...:指定运行时的main方法所在类==org==:包含springboot一些文件==BOOT-INF==:包含class文件和依赖jar==META-INF==:包含Class-Path:指定执行运行jar...时的classpath;Main-Class:指定运行时的main方法所在类==org==:包含springboot一些文件==BOOT-INF==:包含class文件和依赖jar==META-INF=...=:包含Class-Path:指定执行运行jar时的classpath;Main-Class:指定运行时的main方法所在类==org==:包含springboot一些文件==BOOT-INF==:包含
第二,如何加载 BOOT-INF/class 目录下的类,以及 BOOT-INF/lib 目录下内嵌的 jar 包中的类。 下面,尾随艿艿,一起来抽丝剥茧! 2....文件,以及 BOOT-INF/lib 目录下的 jar 包。...().startsWith(BOOT_INF_LIB); } 目的就是过滤获得,BOOT-INF/classes/ 目录下的类,以及 BOOT-INF/lib/ 的内嵌 jar 包。.../BOOT-INF/classes!...省略其他 jar 包 从执行结果可以看出,BOOT-INF/classes/ 目录被归类为一个 Archive 对象,而 BOOT-INF/lib/ 目录下的每个内嵌 jar 包都对应一个 Archive
/tmp/BOOT-INF/lib/ $ rm -rf mysql-connector-java-8.0.16.jar 添加低版本的MySQL驱动包 1 2 $ cd ..../BOOT-INF/lib/ 修改classpath.idx文件中的JAR列表 1 2 3 $ cd ..../tmp/BOOT-INF/ $ vim classpath.idx $ # 把那个高版本驱动程序JAR名称修改成低版本的名称即可 重新打包Jar 1 2 $ cd .
一.将Test1.class和Test2.class替换到jar内部 步骤1:解压原始demo.jar 将两个class文件拷贝到jar目录下后cd到文件目录执行: jar xf demo.jar BOOT-INF.../classes/com/test/ jar xf demo.jar BOOT-INF/classes/com/test/ 步骤2:替换或添加class文件 copy Test1.class BOOT-INF.../classes/com/test/ copy Test2.class BOOT-INF/classes/com/test/ 步骤3:重新打包jar jar uf demo.jar BOOT-INF/classes.../com/test/Test1.class jar uf demo.jar BOOT-INF/classes/com/test/Test2.class 二、优先加载外部的配置文件application-dev.properties
JRA,下图我们用maven命令直接编译打包 执行mvn clean package -DskipTests=true -P test ,生成的文件如下 这个JAR我们分两部分来讲解请看下图 BOOT-INF...org.springframework.boot.loader.JarLauncher Start-Class: com.xxx.xxxxApplication Spring-Boot-Classes: BOOT-INF.../classes/ 2、Spring-Boot-Lib: BOOT-INF/lib/ 应用程序相关属性 1、Main-Class org.springframework.boot.loader.JarLauncher.../classes/"; static final String BOOT_INF_LIB = "BOOT-INF/lib/"; public JarLauncher() { }...entry.getName().equals("BOOT-INF/classes/") : entry.getName().startsWith("BOOT-INF/lib/"); }
/BOOT-INF/lib/*.jar或[ArchiveDir]/BOOT-INF/lib/*.jar List getNestedArchives(EntryFilter filter...classes are included inside a /BOOT-INF/classes directory....按照定义,JarLauncher可以加载内部/BOOT-INF/lib下的jar及/BOOT-INF/classes下的应用class。...至此,才执行我们应用程序主入口类的main方法,所有应用程序类文件均可通过/BOOT-INF/classes加载,所有依赖的第三方jar均可通过/BOOT-INF/lib加载。 ?...---- 小结 JarLauncher通过加载BOOT-INF/classes目录及BOOT-INF/lib目录下jar文件,实现了fat jar的启动。