![](/img/trans.png)
[英]/BOOT-INF/classes (No such file or directory) on spring boot java project
[英]how to extract a file from spring-boot jar BOOT-INF\lib folder
啟動spring-boot應用程序時,如何提取與spring-boot jar
打包在一起的*.zip
文件。 我之所以要提取它們,是因為這些依賴項*.zip
包含特定於環境的本機文件(對於window
.dll,對於linux
.so)。
如何將該臨時位置設置為java.libarary.path
或我可以配置該路徑。
問題“如何獲取特定於環境的配置文件?”有兩種典型的解決方案。
解決方案1:使用一個屬性文件,其中包含每種環境的設置。 使用特定於環境的屬性后綴。 這是一個例子:
dev.port=123456
ist.port=98745
prod.prot=90458
根據應用程序運行的環境,它將選擇端口值之一。
解決方案2:Spring-Boot允許您為應用程序屬性配置替代文件。 一種方法是在調用springApplication.run
方法之前設置“ spring.config.location”值。 這是一個示例(長字符串包裝成適合不滾動顯示):
springApplicationBuilder.properties(
"spring.config.location=classpath:/default.properties," +
"/local/path/on/deploy/host/config/overrides.properties");
springApplication = springApplicationBuilder.build();
springApplication.run(argumentArray);
編輯:更新每個評論。
考慮執行以下操作:
不可能在運行時知道該zip的解壓縮位置,這意味着您無法提前設置java.library.path
。
我建議將.dll
和.so
文件原樣保留在您的項目中,而不要將它們打包在zip文件中。 這樣,您就可以在設置庫路徑時引用一個恆定路徑。
我會避免將它們直接放置在resources
目錄中,而是將其放置在單獨的目錄中。 這只是個人喜好; 我相信,如果您將本機文件放在那里,它將起作用,並且我相信在這種情況下,您需要設置java.library.path=resources
(未經測試)。
例如,我們使用Docker部署了具有本地依賴項的spring boot應用程序,我們只是將.so
文件掛載為Docker卷,該卷在/native
的容器中可用。 然后,我們只是將JVM args設置為包括-Djava.library.path=/native
。
請注意,您可能還需要為Linux設置LD_LIBRARY_PATH
。 這個問題可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.