簡體   English   中英

檢測類加載器加載的資源的路徑

[英]Detect the path of a resource loaded by classloader

我們有一個 java 應用程序,它正在從類路徑加載 logback.xml 文件。 我們如何從加載該文件的位置得知 jar/目錄的確切位置?

我在 main() 中嘗試了這個代碼片段:

 URL[] urLs = ((URLClassLoader) (Thread.currentThread().getContextClassLoader())).getURLs();
 for (URL url: urLs) {
    System.out.println("classloader url="+url);
 }

它打印由類加載器加載的所有 jars:

classloader url=jar:file:/my-service.jar!/BOOT-INF/classes!/
classloader url=jar:file:/my-service.jar!/BOOT-INF/lib/spring-boot-2.5.2.jar!/
classloader url=jar:file:/my-service.jar!/BOOT-INF/lib/spring-boot-actuator-2.5.2.jar!/
classloader url=jar:file:/my-service.jar!/BOOT-INF/lib/spring-cloud-starter-bootstrap-3.0.3.jar!/
classloader url=jar:file:/my-service.jar!/BOOT-INF/lib/spring-cloud-starter-3.0.3.jar!/
classloader url=jar:file:/my-service.jar!/BOOT-INF/lib/spring-cloud-context-3.0.3.jar!/

謝謝你。

我們如何從加載該文件的位置得知 jar/目錄的確切位置?

它在 URL 中。

jar:file:/my-service.jar!/BOOT-INF/classes!/

指URL“file:/my-service.jar”給出的JAR文件中的目錄“/BOOT-INF/classes”中的目錄“/”

jar:file:/my-service.jar!/BOOT-INF/lib/spring-boot-2.5.2.jar!/

指JAR文件中JAR文件“/BOOT-INF/lib/spring-boot-2.5.2.jar”中的目錄“/”由ZE6B391A8D2C4D45902A23A8B給出的“文件:/myservice-55902A23A8B”

等等。

這里實際發生的是 Spring 引導類加載器了解如何在 JARs 中找到嵌套在其他 JARs 中的東西。

如果要查找特定資源將從哪里加載,可以調用classLoader.getResource(resourcePath)獲取 URL,然后如上解釋 URL。

如果我正確讀取https://logback.qos.ch/manual/configuration.html ,默認資源路徑將是“/logback-test.xml”,后跟“/logback.xml”。 但這可以通過各種方式覆蓋。

您還應該能夠通過設置系統屬性來跟蹤 Logback 從何處獲取其配置; 請參閱如何確定 Logback 實際使用的日志配置源?

暫無
暫無

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

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