閑聊
最近在將原有單一應(yīng)用架構(gòu)的項(xiàng)目升級(jí)為分布式項(xiàng)目結(jié)構(gòu),按照不同的功能,劃分成不同的獨(dú)立運(yùn)行服務(wù),每個(gè)服務(wù)都以jar運(yùn)行。
問題
發(fā)現(xiàn)用java -jar來運(yùn)行 服務(wù)的時(shí)候,提示ClassNotFound,找了一下META-INF/MANIFEST.MF文件,發(fā)現(xiàn)classpath 沒有項(xiàng)目所依賴的jar包。
maven里有兩個(gè)插件影響MF文件的生成: maven-jar-plugin 跟 maven-dependency-plugin
maven-jar-plugin:用于生成jar包,包括MF文件的描述信息等配置,其中包括了classpath的配置,這里會(huì)掃描指定依賴的包來進(jìn)行配置
maven-dependency-plugin:用于將依賴的jar包復(fù)制到指定的目錄下
原因
由于插件順序?yàn)?: 1.maven-jar-plugin => 2.maven-dependency-plugin
導(dǎo)致了在生成MF文件之前還沒有將依賴的jar包匯合好,就已經(jīng)開始寫入MF文件的classpath屬性。
解決
1.將兩個(gè)插件順序互換 maven-dependency-plugin => maven-jar-plugin
2.將插件順序生效, 調(diào)用mvn clean 清空依賴包的集合目錄
如果不執(zhí)行mvn clean ,maven-jar-plugin 插件會(huì)將舊的jar包掃描到MF文件classpath中
參考信息:
mvn clean 與mvn clean install區(qū)別
http://blog.csdn.net/abc86319253/article/details/44019881