簡體   English   中英

我如何告訴 Spring Boot 將一些類放在 jar 的根目錄而不是 BOOT-INF?

[英]How can I tell Spring Boot to place some of the classes at the root of the jar instead of BOOT-INF?

我正在嘗試在我的 Spring Boot(版本 2.6.3)應用程序中設置自定義日志Handler程序。 結果是另一個問題中描述的ClassNotFound

無法在 Spring 引導 web 應用程序中覆蓋 java.util.logging.LogManager:在已加載的 class 上獲取 java.lang.ClassNotFoundException

根據對該問題的回答,似乎我需要將我的Handler程序及其所有依賴項放入可執行文件 jar 的根目錄中。

在 Maven 構建期間是否有直接的方法來完成此操作,即不是通過自己在構建后提取和重新打包 jar?

此問題是 Spring Boot 1.4 引入的 BOOT-INF fat jar 結構的結果。

目前沒有直接的解決方案,一些 Spring 引導維護者似乎不同意存在問題,因此情況可能需要很長時間才能改變:

解決方法 #1

我必須做兩件事才能讓我的應用程序再次使用自定義日志處理程序。 1) 使用 Maven Shade 到 package 啟動日志處理程序及其所有依賴項,以及 2) 在命令行中使用PropertiesLauncher class 啟動應用程序,而不是使用java -jar

java -cp executable.jar:logger-shaded.jar -Dloader.main=mypackage.myapp org.springframework.boot.loader.PropertiesLauncher

executable.jarlogger-shaded.jarmypackage.myapp是特定於我的項目的占位符,因此請相應地進行調整。

解決方法 #2

如果處理程序是從配置 class 或main()中的代碼加載的,而不是在通過java.util.logging.config.file加載的文件中指定的,如其他問題答案的評論中所討論的那樣,那么一切按預期工作。 事實上,我更喜歡這個而不是解決方法 #1,因為它會導致更小的部署,但它確實需要編寫更多的代碼行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM