SpringBoot項目中jar發(fā)布獲取jar包所在目錄路徑的最佳方法
示例代碼:
//第一種
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) path = new File("");
System.out.println(path.getAbsolutePath());
//第二種
System.out.println(System.getProperty("user.dir"));
//第三種
String path1 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
System.out.println(URLDecoder.decode(path1, "utf-8"));
//第四種
String path2 = ResourceUtils.getURL("classpath:").getPath();
System.out.println(path2);
//第五種
ApplicationHome h = new ApplicationHome(getClass());
File jarF = h.getSource();
System.out.println(jarF.getParentFile().toString());
這幾種獲取項目目錄的方式中,其中:
第一種、第二種得到的結(jié)果一致
第三種、第四種得到的結(jié)果一致
但是,不同的運行方式,他們的結(jié)果是有偏差的。下面我們來看下不同情況下依次打印的路徑是什么。
先看下直接在idea中運行main方法啟動項目時候,打印的路徑,顯示如下:

再看下打包成jar包中,打印的路徑
第一種執(zhí)行方式
操作方式:打開命令行,目錄切換到j(luò)ar包所在目錄,然后執(zhí)行 jar -jar 啟動命令,打印的路徑如下:

第二種執(zhí)行方式
操作方式:打開命令行,直接java -jar E:/web_pack/bis_exporter-1.0-SANPSHOT.jar,即不切換到j(luò)ar所在目錄,而是直接執(zhí)行,打印的路徑如下:

是不是發(fā)現(xiàn)問題了!在這種情況下,第一種和第二種方式打印的路徑是不對的,他打印的路徑就是當前執(zhí)行命令時所在的目錄。這就很容易造成不必要的bug。
例如:我們在jar的根目錄寫一個自定義數(shù)據(jù)配置文件,通過第一種或者第二種方式讀取數(shù)據(jù),那么使用遠程執(zhí)行jar的方式,就一定會報找不到配置文件的錯誤。
補充:springboot獲取運行Jar包的目錄
//linux和windows下通用
private String getJarFilePath() {
ApplicationHome home = new ApplicationHome(getClass());
File jarFile = home.getSource();
return jarFile.getParentFile().toString();
}
總結(jié)
綜上所述,最好使用第五種方案,獲取運行jar所在的目錄。
到此這篇關(guān)于SpringBoot項目中jar發(fā)布獲取jar包所在目錄路徑的文章就介紹到這了,更多相關(guān)SpringBoot獲取jar包所在目錄路徑內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析
這篇文章主要介紹了Java創(chuàng)建多線程異步執(zhí)行實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
Java訪問Hadoop分布式文件系統(tǒng)HDFS的配置說明
Hadoop的能提供高吞吐量的數(shù)據(jù)訪問,是集群式服務(wù)器的上的數(shù)據(jù)操作利器,這里就來為大家分享Java訪問Hadoop分布式文件系統(tǒng)HDFS的配置說明:2016-06-06

