如果對maven不會(huì)用甚至不知道是什么的話爹橱,建議先看看下面幾篇,看完,相信你會(huì)有所啟發(fā)鹊漠,并會(huì)對項(xiàng)目進(jìn)行一個(gè)完整的依賴構(gòu)建-打包測試-部署發(fā)布
- Maven系列(一)Maven的簡介與使用
- Maven系列(二)無Maven不項(xiàng)目---使用Eclipse快速搭建Maven項(xiàng)目
- Maven系列(三)Maven給不同的環(huán)境打包
- Maven系列(四)Maven熱部署
- Maven系列(五)CentOS7搭建最新GitLab
- Maven系列(六)配合GitLab持續(xù)集成(CI)
開發(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)目錄
項(xiàng)目里有腳本,在linux里可以執(zhí)行冻晤,執(zhí)行命令
mvn clean install
之后就會(huì)生成對應(yīng)一個(gè)zip壓縮包苇羡,解壓后如圖
這樣程序和jar包、資源文件分開鼻弧,就方便調(diào)用了设江,代碼上傳到了github上。
歡迎瀏覽我的個(gè)人博客