摘要:背景由于版權(quán)問(wèn)題,中央倉(cāng)庫(kù)缺少的驅(qū)動(dòng),這個(gè)給開(kāi)發(fā)帶來(lái)了很多不便利性。本文主要探討的就是第三個(gè)問(wèn)題,怎么把驅(qū)動(dòng)打到包里背景交代完畢,正文開(kāi)始。是的,如果你只是想在本地打一個(gè)包,這種方式簡(jiǎn)單方便。
背景
由于版權(quán)問(wèn)題,maven中央倉(cāng)庫(kù)缺少oracle jdbc的驅(qū)動(dòng),這個(gè)給開(kāi)發(fā)帶來(lái)了很多不便利性。也出現(xiàn)各種各樣的解決方案,基本就兩種思路:
將oracle驅(qū)動(dòng)安裝到本地倉(cāng)庫(kù),這個(gè)需要大家統(tǒng)一好名稱(chēng)和版本
使用第三方倉(cāng)庫(kù)
不管哪種方案,本來(lái)maven就是為了方便開(kāi)發(fā)人員管理包依賴(lài),這樣一來(lái)反而更麻煩。當(dāng)然,不是maven的錯(cuò),oracle這事做的確實(shí)夠sb。(聽(tīng)說(shuō)oracle要對(duì)java進(jìn)行收費(fèi)???)
那么有沒(méi)有更好的方案,假設(shè)你現(xiàn)在開(kāi)發(fā)了一個(gè)框架,框架支持多數(shù)據(jù)庫(kù),并且已經(jīng)將jar包提交至maven中央倉(cāng)庫(kù),如果你的jar包里面就已經(jīng)包含了oracle驅(qū)動(dòng),那么使用框架的人就不用額外再去導(dǎo)入驅(qū)動(dòng)。
這種方案有以下幾個(gè)小問(wèn)題
會(huì)不會(huì)有版權(quán)問(wèn)題(這個(gè)不是很了解)
驅(qū)動(dòng)升級(jí)怎么辦
怎么把驅(qū)動(dòng)打到j(luò)ar包里
關(guān)于驅(qū)動(dòng)升級(jí)問(wèn)題,可以對(duì)jar包發(fā)布多個(gè)版本,比如純凈版不包含驅(qū)動(dòng),驅(qū)動(dòng)xxx版包含不同版本的驅(qū)動(dòng)。
本文主要探討的就是第三個(gè)問(wèn)題,怎么把驅(qū)動(dòng)打到j(luò)ar包里
背景交代完畢,正文開(kāi)始。
實(shí)現(xiàn) 遇到的問(wèn)題你可能覺(jué)得,這是個(gè)很簡(jiǎn)單的事,通過(guò)idea的Artifacts不就行了。是的,如果你只是想在本地打一個(gè)jar包,這種方式簡(jiǎn)單方便。但如果要上傳到maven,就得使用maven來(lái)打包,maven是不管你ide是怎么配置的,而且maven不會(huì)將依賴(lài)包打到j(luò)ar包里的。有幾個(gè)方案可以考慮
借助maven插件maven-assembly-plugin可以實(shí)現(xiàn)自定義打包,但是該插件是將依賴(lài)包全部放在lib目錄下,這個(gè)不是我的本意,我的本意是將依賴(lài)包里的class文件解壓到根目錄下,和自開(kāi)發(fā)的jar包同一個(gè)目錄下。(這個(gè)插件我研究了很久不能實(shí)現(xiàn)就放棄了,如果有知道怎么實(shí)現(xiàn)的讀者歡迎留言)
自己寫(xiě)插件實(shí)現(xiàn),其實(shí)難度也不大,就是麻煩點(diǎn)
借助maven腳本執(zhí)行插件exec-maven-plugin執(zhí)行自定義腳本對(duì)maven打包后的jar包進(jìn)行"改造"。
最終選擇了第三個(gè)方案,寫(xiě)shell腳本實(shí)現(xiàn)自定義打包
配置首先引入插件的依賴(lài)
pom.xml
exec-maven-plugin org.codehaus.mojo asan package exec ${basedir}/scripts/package.sh ${project.build.directory} ${project.build.finalName} /Users/asan/u01/docker/lib/ojdbc6.jar
phase:在打包這個(gè)生命周期結(jié)束后執(zhí)行該腳本
executable:腳本目錄位置
arguments:傳給腳本的參數(shù),這里傳了三個(gè)參數(shù)
${basedir}:當(dāng)前目錄,就是項(xiàng)目所在目錄
${project.build.directory}:maven構(gòu)建目錄,就是target目錄
${project.build.finalName}:maven打包名稱(chēng)
/you/path/ojdbc6.jar:要打進(jìn)去的jar包路徑
腳本package.sh
v_workspace=$1/tmp v_name=$2.jar v_depency=$3 v_depency_name=`basename $3` echo "workspace==>$v_workspace" echo "name==>$v_name" echo $v_depency echo $v_depency_name rm -rf $v_workspace mkdir -p $v_workspace cp $v_depency $v_workspace cd $v_workspace jar -xf $v_workspace/$v_depency_name rm -rf $v_workspace/$v_depency_name rm -rf META-INF/ cp $1/$v_name $v_workspace for file in `ls $v_workspace` do if [ -d $file ] then jar -uf $v_workspace/$v_name $file fi done rm -rf $1/$v_name mv $v_workspace/$v_name $1/$v_name
整個(gè)腳本的大概流程如下
創(chuàng)建一個(gè)臨時(shí)目錄v_workspace
將依賴(lài)包復(fù)制到臨時(shí)目錄下
解壓依賴(lài)包
刪除jar包和META-INF文件夾
將項(xiàng)目的jar包復(fù)制到臨時(shí)目錄下
遍歷所有文件夾,將文件夾通過(guò)命令jar -uf更新到項(xiàng)目jar包里
用新的jar包替換掉老的jar包
寫(xiě)在最后現(xiàn)在腳本里只支持一個(gè)jar包,稍微修改下就可以支持多個(gè),或者你可以在自己本地把多個(gè)jar包用jar -uf打到一個(gè)jar包里,再執(zhí)行腳本。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72255.html
摘要:同時(shí)配置和配置文件數(shù)據(jù)庫(kù)驅(qū)動(dòng)包因?yàn)樵趥}(cāng)庫(kù)下載不到,就直接下載手動(dòng)導(dǎo)入配置文件數(shù)據(jù)源配置類(lèi)測(cè)試類(lèi)啟動(dòng)之后訪問(wèn)看后臺(tái)有打印結(jié)果表示配置成功借鑒 Spring Boot 1.5.8.RELEASE同時(shí)配置Oracle和MySQL 配置POM文件 4.0.0 com.adagio demo 0.0.1-SNAPSHOT jar multi...
閱讀 943·2023-04-25 18:51
閱讀 1916·2021-09-09 11:39
閱讀 3311·2019-08-30 15:53
閱讀 2119·2019-08-30 13:03
閱讀 1334·2019-08-29 16:17
閱讀 604·2019-08-29 11:33
閱讀 1916·2019-08-26 14:00
閱讀 2145·2019-08-26 13:41