Maven系列(七)assembly打包-程序和依賴jar包分開化

如果對maven不會(huì)用甚至不知道是什么的話爹橱,建議先看看下面幾篇,看完,相信你會(huì)有所啟發(fā)鹊漠,并會(huì)對項(xiàng)目進(jìn)行一個(gè)完整的依賴構(gòu)建-打包測試-部署發(fā)布

maven.png

開發(fā)過javaweb項(xiàng)目并發(fā)布過的兄dei知道,普通的war包放到tomcat里之后茶行,隨著tomcat的啟動(dòng)躯概,war包會(huì)自動(dòng)解壓成文件,假如程序里有調(diào)用xml資源文件(不是spring相關(guān)的配置文件)畔师,那么在程序里指定相對路徑就行了娶靡,但是最近我有一個(gè)服務(wù),我把一些賬戶的用戶名和密碼放在xml里看锉,然后程序用到的時(shí)候直接使用xpath從文件去取就行了姿锭,這是比較常規(guī)的做法,idea直接運(yùn)行咩有問題伯铣,但是當(dāng)我打成jar包放在服務(wù)器上啟動(dòng)的時(shí)候呻此,報(bào)錯(cuò)說是找不到資源文件,即程找不到我存用戶名與密碼的xml文件懂傀,思來想去趾诗,明白了,因?yàn)閤ml文件在jar包里,程序在執(zhí)行的時(shí)候根本就找不到文件恃泪,因?yàn)閖ar包沒有被解壓郑兴,根據(jù)相對路徑也就找不到文件(我是這么理解的,不知道對不對)贝乎,這個(gè)時(shí)候我就明白了我以往的打包方式在這個(gè)服務(wù)是行不通的情连。這里說一下,我用的是springboot览效,打包的使用的是springboot提供的plugin却舀,如下

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

一般來講,springboot項(xiàng)目使用這個(gè)插件锤灿,就自動(dòng)將程序和那些依賴的jar包捆綁在一起挽拔,然后通過java -jar xxx.jar運(yùn)行就OK了

再來說說maven打包的方式,整體來講分為兩大類

  • 第一種就是上面說的將所有的依賴jar包但校、資源文件和程序捆綁在一起螃诅,比較常見;
  • 第二種就是將程序和依賴的jar包和資源文件分開状囱,比較靈活术裸,可以自己編寫一些shell腳本來啟動(dòng)或停止程序

各有各的好,具體的還需要視項(xiàng)目來定亭枷。
接下來說說第二種打包方式袭艺,我這里使用的是maven插件assembly,自己順便寫了個(gè)linux下執(zhí)行和停止的腳本,解決了上面的問題叨粘,而且使用起來很方便猾编,下面是步驟

去掉其他打包的插件

我將springboot的打包插件刪掉,使用下面的插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archive>
            <manifest>
                <!--指定main入口-->
                <mainClass>com.quick.Application</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <manifestEntries>
                <Class-Path>./</Class-Path>
            </manifestEntries>
        </archive>
        <excludes>
            <exclude>config/**</exclude>
        </excludes>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <!-- not append assembly id in release file name -->
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
            <!--打包的詳細(xì)描述宣鄙,需要配置額外文件-->
            <descriptor>src/main/build/package.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

對應(yīng)的package.xml文件內(nèi)容為

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>package</id>
    <formats>
        <!--壓縮文件的類型-->
        <format>zip</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <!--需要包含的文件與輸出的路徑-->
        <fileSet>
            <directory>src/main/bin</directory>
            <outputDirectory>bin/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>src/main/resources</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <scope>runtime</scope>
            <excludes>
                <exclude>${groupId}:${artifactId}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

這些可以直接拿來用袍镀,如果想看詳細(xì)的解析點(diǎn)我
下面是項(xiàng)目的結(jié)構(gòu)目錄

結(jié)構(gòu).png

項(xiàng)目里有腳本,在linux里可以執(zhí)行冻晤,執(zhí)行命令mvn clean install之后就會(huì)生成對應(yīng)一個(gè)zip壓縮包苇羡,解壓后如圖

文件目錄.png

這樣程序和jar包、資源文件分開鼻弧,就方便調(diào)用了设江,代碼上傳到了github上。

歡迎瀏覽我的個(gè)人博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子习寸,更是在濱河造成了極大的恐慌莲镣,老刑警劉巖蚁鳖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藻雌,死亡現(xiàn)場離奇詭異栅贴,居然都是意外死亡著瓶,警方通過查閱死者的電腦和手機(jī)瞳秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門瓣履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人练俐,你說我怎么就攤上這事袖迎。” “怎么了腺晾?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵燕锥,是天一觀的道長。 經(jīng)常有香客問我悯蝉,道長归形,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任泉粉,我火速辦了婚禮连霉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗡靡。我一直安慰自己,他們只是感情好窟感,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布讨彼。 她就那樣靜靜地躺著,像睡著了一般柿祈。 火紅的嫁衣襯著肌膚如雪哈误。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天躏嚎,我揣著相機(jī)與錄音蜜自,去河邊找鬼。 笑死卢佣,一個(gè)胖子當(dāng)著我的面吹牛重荠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虚茶,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼戈鲁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘹叫?” 一聲冷哼從身側(cè)響起婆殿,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罩扇,沒想到半個(gè)月后婆芦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年消约,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癌压。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荆陆,死狀恐怖滩届,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情被啼,我是刑警寧澤帜消,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站浓体,受9級(jí)特大地震影響泡挺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜命浴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一娄猫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧生闲,春花似錦媳溺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捉兴,卻和暖如春蝎困,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倍啥。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工禾乘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虽缕。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓始藕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彼宠。 傳聞我的和親對象是個(gè)殘疾皇子鳄虱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)凭峡,斷路器拙已,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評(píng)論 25 707
  • 關(guān)于老師分享自己年終總結(jié)的一些記錄,帶有自己的解讀摧冀,整理得比較粗糙倍踪,見諒系宫。 關(guān)于app上線功能 先抗住再優(yōu)化,越快...
    雨果僧閱讀 179評(píng)論 0 1
  • 快樂與幸福其實(shí)并不是在舒適中獲得,而是來源于各種磨難與痛苦缤至,痛并快樂著潮罪,也許就是最好的闡述
    Kalon閱讀 191評(píng)論 0 0