myeclipse 生成jar包後,spring無法掃描到bean定義
myeclipse jar add directory entries
之前,我曾經寫過一篇Java遍歷包中所有類,但經過一名網友提醒發現,只能適用於專案src中的包,當包在jar裡時就無法遍歷jar裡的類。就此我針對程式碼進行了細化,功能得到進一步的完善。
在分享原始碼之前,先說說我在遍歷jar包中的類時所遇到的困難。
這是我測試用的jar包,結構如下:
無論包是在src中還是在jar中,其實根本的思路還是根據給的包域名(如:com.wang.vo.request.hotel.test)定位到包的資源物件。包在src中,我們可以把它當做檔案File來進行處理,因此在src中包是以資料夾的形式來體現的,但在jar中,包的含義是有些不同的,我們不能把它當做File來對待(這樣你或得到的是jar的File物件)。那麼怎麼才能獲取jar裡包的資源物件呢?
程式碼如下:
public static void main(String[] args) throws Exception {
String packageName = "com/wang/vo/request/hotel/test";
URL url = Thread.currentThread().getContextClassLoader().getResource(packageName);
if (url != null) {
System.out.println(url.getPath());
}
}
但是通過上述程式碼,執行後卻發現url始終為空,嘗試過各種獲取資源的辦法(如getResourceAsStream),均無法解決,我試了試其他的jar包(如spring的),卻發現相同的程式碼url卻有值。經過我反覆的測試和分析發現,問題出現在生成jar包的方式
一般來說,我們打jar包的步驟大致如下:
之後一直預設,然後Finish。這樣看似沒問題,但問題出現在這一步:
這種預設方式生成的jar包中,只含有class檔案,而並沒有我們大眾所知的資料夾目錄結構。可能我們大多數人認為com.test.Student類,Student類檔案就應該在com資料夾下的test資料夾裡,這其實是片面的,是一個誤區!
com.test真正的含義是package包域名,就好比.net裡的名稱空間,它只是為了區分、彙總、唯一標識不同的類而提出的概念,跟資料夾目錄層次結構是兩回事,我們只是習慣上用資料夾目錄來展示package而已。但package卻不一定非要用過資料夾目錄來展示。
我們可以用下面這段程式碼來進一步說明這個問題
public static void main(String[] args) throws Exception {
// 專案中jar包所在物理路徑
String jarName = "E:/Work/stsf_skisok_product/WebRoot/WEB-INF/lib/testpackage.jar";
JarFile jarFile = new JarFile(jarName);
Enumeration<JarEntry> entrys = jarFile.entries();
while (entrys.hasMoreElements()) {
JarEntry jarEntry = entrys.nextElement();
System.out.println(jarEntry.getName());
}
}
預設生成的jar包,執行結果如下:
META-INF/MANIFEST.MF
com/wang/util/DateStyle.class
com/wang/util/PropertiesUtil$1.class
com/wang/util/PropertiesUtil.class
com/wang/util/Week.class
com/wang/util/DateUtil.class
com/wang/vo/request/hotel/test/PopularCityRequest.class
com/wang/vo/request/hotel/test/EconomicsRequest.class
com/wang/vo/request/hotel/test/HotelProductVouchRequest.class
com/wang/vo/request/hotel/test/QueryOrderListRequest.class
com/wang/vo/request/hotel/test/HotelListQueryRequest.class
com/wang/vo/request/hotel/test/RoomReserveRequest.class
com/wang/vo/request/hotel/test/HotelOneQueryRequest.class
com/wang/vo/request/hotel/test/HotelBrandRequest.class
如果勾選Add directory entries選項生成的jar包,執行結果如下:
META-INF/MANIFEST.MF
com/
com/wang/
com/wang/util/
com/wang/util/DateStyle.class
com/wang/util/PropertiesUtil$1.class
com/wang/util/PropertiesUtil.class
com/wang/util/Week.class
com/wang/util/DateUtil.class
com/wang/vo/
com/wang/vo/request/
com/wang/vo/request/hotel/
com/wang/vo/request/hotel/test/
com/wang/vo/request/hotel/test/PopularCityRequest.class
com/wang/vo/request/hotel/test/EconomicsRequest.class
com/wang/vo/request/hotel/test/HotelProductVouchRequest.class
com/wang/vo/request/hotel/test/QueryOrderListRequest.class
com/wang/vo/request/hotel/test/HotelListQueryRequest.class
com/wang/vo/request/hotel/test/RoomReserveRequest.class
com/wang/vo/request/hotel/test/HotelOneQueryRequest.class
com/wang/vo/request/hotel/test/HotelBrandRequest.class
這樣也就解釋了為何打成jar包後用getResource獲取資源url總是為空的原因了。
相關推薦
myeclipse 生成jar包後,spring無法掃描到bean定義
myeclipse jar add directory entries 之前,我曾經寫過一篇Java遍歷包中所有類,但經過一名網友提醒發現,只能適用於專案src中的包,當包在jar裡時就無法遍歷jar裡的類。就此我針對程式碼進行了細化,功能得到進一步的完善。 在分
Eclipse生成jar包後,Spring無法掃描到bean定義
無論包是在src中還是在jar中,其實根本的思路還是根據給的包域名(如:com.wang.vo.request.hotel.test)定位到包的資源物件。包在src中,我們可以把它當做檔案File來進行處理,因此在src中包是以資料夾的形式來體現的,但在jar中
myeclipse 生成jar包操作
選擇第一個 引用的jar包會整合到專案中去。 選擇第二個 引用的jar包會單獨放在專案根目錄下(推薦)。 選擇第三個 引用的jar包會單獨放在一個資料夾下,這個資料夾和匯出的jar放在同一目錄下,finish。遇到的問題:(網路來源)為什麼export-->
關於將aop功能封裝成jar包後,被其他模組依賴後,aop功能無法實現的問題(包掃描)
在開發中,將aop的功能寫到了公共模組後,然後將公共模組封裝成jar包,被其他專案所依賴。但是出現aop功能無法實現,是因為未掃描到該包下的類,需要在引用模組的啟動類中加入掃描的程式碼 @ComponentScan(basePackages = {"xxx.xxx.*"})
spring boot mybatis 打成可執行jar包後啟動UnsatisfiedDependencyException異常
我的spring boot + mybatis專案在idea裡面執行正常,但釋出測試環境打成可執行jar包後就啟動失敗,提示錯誤如下: [ ERROR] [2018-08-30 17:23:48] org.springframework.boot.SpringApplication [845] - Appl
Spring-boot 打成jar包後使用外部配置檔案
官網說明 第一種是在jar包的同一目錄下建一個config資料夾,然後把配置檔案放到這個資料夾下; 第二種是直接把配置檔案放到jar包的同級目錄; 第三種在classpath下建一個config資料夾,然後把配置檔案放進去; 第四種是在classpath下直接放配置檔
SpringBoot專案打成jar包後無法讀取到resource下的檔案
在Springboot專案的resources下添加了一個Excel模板檔案以供客戶端下載 開發環境下通過這種方式讀取檔案 File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/
springboot打成jar包後無法讀取resource資料夾下檔案模板---------------gxy
springboot打成jar包後無法讀取resource資料夾下檔案模板 BufferedInputStream bis = null; OutputStream os = null; Cla
Spring Boot Maven專案生成jar包,部署到Linux伺服器執行
Spring Boot生成jar ,本篇只針對於 idea 第一部分 生成jar 1.首先進入“Project Structure” ,之後點選 “Artifacts” 2.點選 + 號,選擇JAR 3.進入選擇 ,最後點選 OK
Spring Boot專案生成jar包,並在windows伺服器中註冊成服務,開機啟動
最近工作在windows伺服器上部署 spring boot 的jar包之前都是在linux上執行命令: nohup java -jar xxx.jar > xxx.log & 現在為了達到跟Linux一樣的效果。最終方案:使用winswwinsw是一個開源
Spring boot的pom.xml配置,正確生成jar包
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
解決專案打jar包後無法獲取配置檔案的路徑問題
今天在開發中做一個java專案,要求讀取配置檔案中的資訊,開始一直寫成絕對路徑,當專案打jar包以後就找不到配置檔案了,後面在網上當了一個方法,問題最後解決了,拿出來跟大家分享一下。 public class SMBConfig {//SMB訊息引數public static String SMB_S
IDEA匯出jar包後執行報錯 找不到或無法載入主類
綜上所訴, 我又嘗試在最開始選擇配置的時候,如果選擇extract to the target JAR(提取到目標jar包) 這個選項,那麼對於我這個測試專案就完全沒問題了,生成的test.jar包裡包含MANIFEST.MF檔案,並且這個包裡不會再有其他的jar包了,就沒有問題了
IDEA 生成 jar 包
bsp .com width 所有 settings nbsp png jar -1 Build -> Build Artifacts -> ... 生成的 jar 包在 out/artifacts 目錄下 生成單一 jar 包: 在項目上右擊 ->
android代碼生成jar包
ips 今天 右鍵 編譯 make 技術 名稱 mage .bat 前沿:有時候我們的android項目會有核心算法或代碼,一般這種情況會把算法(cpp文件等)打成so文件,把代碼進行整理打成jar包或aar包;今天我們就來討論怎樣把算法打成so文件,怎樣把關鍵代碼打成ja
java在window下用cmd (javac、jar)命令行模擬Intellij IDEA軟件生成jar包
cmd cti 最重要的 ron 路徑 alloc 不可 alt CP @@首先最重要的cmd命令: javac ,jar :使用如下(註意[.]不要輸錯): 1. javac編譯: D:\MyWorkSet\idea_hadoop>javac -d .\out
命令行生成jar包
工具 創建 clas 表示 stat 打包工具 命令 int class 1.編寫java代碼,保存為HelloWorld.java package test; public class HelloWorld { public static void main(Strin
使用NetBeans生成jar包,並在jar包中添加資源
source img 無法 bubuko res 文件 null lean 歸檔文件 在NetBeans中,執行Clean and Build便可得到jar文件 若要在jar中添加資源,先用壓縮軟件打開jar,然後將資源拖進當前歸檔文件即可 使用Class.getResou
【idea】生成Jar包
用idea打jar包非常方便 我們先看看例項專案 這個專案裡包括 一個數據檔案,位於’data/data’ 一個自定依賴庫,位於’lib/’下 還有一個主java檔案,位於‘src/MyClass.jar’ (如何新增jar包請訪問Intellij IDEA 新增jar包的三種方式
springboot打成Jar包後部署至Linux伺服器上
下面主要記錄一下springboot打包成jar包在Linux服務上部署的步驟: 1、通過WinSCP,將相應的Jar檔案,複製到Linux指定目錄下,如/home/ 2、開啟ssh,進入/home目錄下,執行如下命令,進行專案的啟動,此方式為後臺啟動,即使關閉當前視窗,專案還是在執行的,會生成nohu