如何獲取springboot打成jar后的classpath
獲取springboot打成jar后的classpath
項(xiàng)目需要另一個(gè)子項(xiàng)目Utils的一個(gè)util工具類,在A項(xiàng)目的maven中加入了該子項(xiàng)目
<dependency> ?? ??? ??? ?<groupId>com.supconit.data.algorithm.platform</groupId> ?? ??? ??? ?<artifactId>data_algorithm_util</artifactId> ?? ??? ??? ?<version>1.1.00.190408-SNAPSHOT</version> </dependency>
但是該工具類的執(zhí)行依賴一個(gè)conf文件,把子項(xiàng)目Utils打成jar包后,發(fā)布到linux平臺(tái)上,發(fā)現(xiàn)無法讀取該配置文件
報(bào)錯(cuò)如下:
java.io.FileNotFoundException: class path resource [fdfs_client.conf] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/home/data_algorithm/data_algorithm_executor-1.1.00.190408-SNAPSHOT.jar!/BOOT-INF/lib/data_algorithm_util-1.1.00.190408-SNAPSHOT.jar!/fdfs_client.conf
修改之前的代碼
?String path ?= new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath(); ?ClientGlobal.init(path);
修改之后的代碼
?ClassPathResource classPathResource = new ClassPathResource("fdfs_client.conf"); ? ? ? ? ? ? //創(chuàng)建臨時(shí)文件,將fdfs_client.conf的值賦值到臨時(shí)文件中,創(chuàng)建這個(gè)臨時(shí)文件的原因是springboot打成jar后無法獲取classpath下文件 ? ? ? ? ? ? String tempPath =System.getProperty("java.io.tmpdir") + System.currentTimeMillis()+".conf"; ? ? ? ? ? ? File f = new File(tempPath); ? ? ? ? ? ? IOUtils.copy(classPathResource.getInputStream(),new FileOutputStream(f)); ? ? ? ? ? ? ClientGlobal.init(f.getAbsolutePath());
發(fā)布之后,問題解決,原因是因?yàn)榇虬骃pring試圖訪問文件系統(tǒng)路徑,但無法訪問JAR中的路徑,因此必須使用resource.getInputStream()。
springboot打成jar后獲取classpath下文件異常解決
寫了一個(gè)工具類,要讀取classpath下的文件,使用
Resource resource = new ClassPathResource(filePath); File file = resource.getFile();
在本地測(cè)試,沒發(fā)現(xiàn)問題,但是將項(xiàng)目打包成jar包后運(yùn)行,發(fā)現(xiàn)報(bào)錯(cuò)
Caused by: java.io.FileNotFoundException: class path resource [test.txt] cannot be resolved to absolute file path because it does not reside in the file system: j
原因
打包后Spring試圖訪問文件系統(tǒng)路徑,但無法訪問JAR中的路徑。
解決
Resource resource = new ClassPathResource(filePath); InputStream inputStream = resource.getInputStream();
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java用自定義的類作為HashMap的key值實(shí)例
下面小編就為大家?guī)硪黄狫ava用自定義的類作為HashMap的key值實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12詳解Kotlin:forEach也能break和continue
這篇文章主要介紹了詳解Kotlin:forEach也能break和continue的相關(guān)資料,需要的朋友可以參考下2017-06-06springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離
這篇文章主要介紹了springboot基于Mybatis mysql實(shí)現(xiàn)讀寫分離,需要的朋友可以參考下2019-06-06超詳細(xì)講解Java秒殺項(xiàng)目用戶驗(yàn)證模塊的實(shí)現(xiàn)
這是一個(gè)主要使用java開發(fā)的秒殺系統(tǒng),項(xiàng)目比較大,所以本篇只實(shí)現(xiàn)了用戶驗(yàn)證模塊,代碼非常詳盡,感興趣的朋友快來看看2022-03-03Spring Cloud zuul自定義統(tǒng)一異常處理實(shí)現(xiàn)方法
這篇文章主要介紹了Spring Cloud zuul自定義統(tǒng)一異常處理實(shí)現(xiàn),需要的朋友可以參考下2018-02-02基于mybatis-plus timestamp返回為null問題的排除
這篇文章主要介紹了mybatis-plus timestamp返回為null問題的排除,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例
這篇文章主要介紹了在IDEA啟動(dòng)多個(gè)Spring Boot工程實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01