日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

qt designer 自定义插件找不到指定的模块_SpringBoot之spring-boot-load模块

發布時間:2024/1/23 javascript 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt designer 自定义插件找不到指定的模块_SpringBoot之spring-boot-load模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

正常情況下classloader只能找到jar里面當前目錄或者文件類里面的*.class文件。為了能夠加載嵌套jar里面的資源之前都是把嵌套jar里面的class文件和應用的class文件打包為一個jar,這樣就不存在嵌套jar了,但是這樣做就不能很清晰的知道應用到底依賴了哪些東西,哪些是應用自己的,另外多個jar里面的class可能內容不一樣但是文件名卻一樣。springboot中spring-boot-loader就是為優雅解決這個問題而誕生的。

spring-boot-loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴jar的jar或者war文件,它提供了三種類啟動器 (JarLauncher, WarLauncher and PropertiesLauncher),這些類啟動器的目的一樣都是為了能夠加載嵌套在jar里面的資源(比如class文件,配置文件等)。[Jar|War]Launcher固定去查找當前jar的lib目錄里面的嵌套jar文件里面的資源。

二、spring-boot-loader模塊提供的jar目錄結構

Springboot中jar文件格式固定如下:

archive.jar|+-META-INF(1)| +-MANIFEST.MF+-org(2)| +-springframework| +-boot| +-loader| +-<spring boot loader classes>+-com(3)| +-mycompany| + project| +-YouClasses.class+-lib(4)+-dependency1.jar+-dependency2.jar
  • 結構(1)jar文件中MANIFEST.MF文件存放處
  • 結構(2) Spring-boot-loader本身需要的class放置處
  • 結構(3) 應用本身的文件放置處
  • 結構(4)應用依賴的jar固定放到lib目錄。

那么spring-boot是如何去按照這個結構加載資源那?

  • 首先在打包時候會使用spring-boot-maven-plugin插件重寫打成的jar文件,會設置META-INF/MANIFEST.MF中的Main-Class: org.springframework.boot.loader.JarLauncherStart-Class: com.mycompany.project.MyApplication
    并拷貝spring-boot-loader包里面的class文件到結構(2),應用依賴拷貝到(4)應用類拷貝到(3)
  • 通過java -jar archive.jar 運行時候Launcher會去加載JarLauncher類并執行其中的main函數,JarLauncher主要關心構造一個合適的URLClassLoader加載器用來調用我們應用程序(MyApplication)的main方法。

三、spring-boot-maven-plugin插件打包流程分析


image.png

注:這里需要思考下為何要拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)?

四、JarLauncher執行流程分析


image.png

看完這個流程在分析下第三節留的問題,如流程圖首先使用Appclassloader加載了JarLauncher類并創建了LaunchedURLClassLoader類,而LaunchedURLClassLoader是屬于spring-boot-loader.jar包里面的,而Appclassloader是普通的加載器不能加載嵌套的jar里面的文件,所以如果把spring-boot-loader.jar放到lib 目錄下,Appclassloader將找不到LaunchedURLClassLoader。所以在打包時候
拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)。

五、總結

spring-boot-load模塊通過自定義jar包結構自定義類加載器優雅的實現了嵌套jar資源的加載,通過打包時候重新設置啟動類和組織jar結構,通過運行時設置自定義加載器來實現嵌套jar資源加載。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的qt designer 自定义插件找不到指定的模块_SpringBoot之spring-boot-load模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。