用spring annotation聲明的bean,當打包在jar中時,沒法被掃描到

 

 

發現一個問題,十分蛋疼。 

咱們項目是由N個工程組成的,外圍工程是web工程,內部的工程打包成jar,放入外圍工程的WEB-INF/lib 

內部的工程用到了spring的註解,例如@Service、@Controller等,在打成jar包以前,是能夠掃描到的,可是打成jar包以後,就掃描不到了,報NoSuchBeanException 

在網上搜索了一下,發現了一個辦法,就是在用eclipse export jar的時候,勾選add directory entries java

這樣打出來的jar包,能夠解決這個問題,在外圍也能夠掃描到jar包內用註解聲明的bean。若是沒有勾上add directory entries,就不行了 

用jar命令,比較了一下兩種方法打出的jar包的區別,如圖: web

能夠看到,勾選了add directory entries以後打出的jar包,多了路徑的信息,可能這就是區別 
spring

 


不過如今問題是,咱們不可能都用手工export jar的方式來一個個導出jar包,不知道在maven中,要配置插件的什麼參數,能夠達到一樣的效果 ,bash

參考博客:http://kyfxbl.iteye.com/blog/1675368app

關於maven的問題我有空研究一下eclipse

 

大神解析:https://blog.csdn.net/xlxxcc/article/details/51142585maven

爲防止連接失效:spa

轉載了部分博客:.net

Q: 那麼咱們怎麼解決spring 掃描不到jar中class這個問題呢?

A: 有一種作法,就是打jar包的時候,打成JAR file, 而後選擇 add directory entries

 

Q: 那麼咱們怎麼打包成Runable JAR FILE,而且解決spring 掃描不到jar中class的問題?

A:

一、首先使用Eclipse打包,打包成JAR file。 
二、上傳到Linux, 解壓my.jar插件

unzip my.jar -d myapp
  • 1

三、進入 myapp文件夾, 使用如下命令:

java -Djava.ext.dirs=WebContent/WEB-INF/lib cn.com.test
  • 1

大功告成

其餘技巧:除了上訴使用代碼方式查看jar包物理路徑,咱們還能夠是 jar tr my.jar來查看

相關文章
相關標籤/搜索