Maven 使用maven-assembly-plugin將依賴包一塊打包
阿新 • • 發佈:2019-01-23
對於菜鳥來說,maven也是一座大山。在IDEA中執行package命令後,打出的包是不帶依賴包的。
加入依賴包的話,首先看下目錄結構(這個目錄結構可以修改,不是絕對的)
首先在pom檔案plugins節點下加入
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <archive><manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>執行的主類全限定路徑</mainClass> <useUniqueVersions>false</useUniqueVersions> </manifest></archive> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptor>src/main/assembly/assembly.xml</descriptor> </configuration> <executions> <execution><id>make-assembly</id> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
不建議使用
<descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
雖然是官方提供的定製化打包方式。
建議使用<descriptor>來打包。
而assembly.xml的內容是
<assembly> <id>assembly</id> <!--字尾名 如${artifactId}-${id}.tar.gz--> <formats> <format>tar.gz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.basedir}/src/main/bin</directory> <outputDirectory>bin</outputDirectory> <!--根據上面指定的目錄,將指定檔案打到該bin目錄下,主要是啟動指令碼 --> <fileMode>0755</fileMode> <!--指定檔案屬性,使用八進位制表達,分別為(User)(Group)(Other)所屬屬性,預設為 0644--> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <!--預設的jar都在lib裡--> </dependencySet> </dependencySets> </assembly>
<format>標籤
maven-assembly-plugin 支援的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同時指定多個打包格式。
基本配置已經完成。推薦閱讀
在專案根路徑下使用命令
mvn assembly:assembly -Dmaven.test.skip=true
打出的包結構為
lib下:
bin下:
而啟動指令碼:
start.sh:
#!/bin/bash cd `dirname $0` cd ../lib LIB_DIR=`pwd` SERVER_NAME='啟動主類全限定名' PIDS=`ps -ef | grep java | grep "$LIB_DIR" |grep $SERVER_NAME|awk '{print $2}'` if [ -n "$PIDS" ]; then echo "start fail! The $SERVER_NAME already started!" exit 1 fi LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"` cd .. nohup java -Djava.net.preferIPv4Stack=true -server -Xms1g -Xmx1g -XX:PermSize=128m -classpath $LIB_JARS $SERVER_NAME 1>/dev/null 2>&1 & echo "start "$SERVER_NAME" success!"
nohup命令是後臺啟動,不然會佔用啟動視窗不能關閉。
stop.sh:
#!/bin/bash PWD=`pwd` cd `dirname $0` cd ../lib LIB_DIR=`pwd` SERVER_NAME='啟動主類全限定名' PIDS=`ps -ef | grep java | grep "$LIB_DIR" |grep $SERVER_NAME|awk '{print $2}'` if [ -z "$PIDS" ]; then echo "stop fail! The $SERVER_NAME not start!" exit 1 fi for PID in $PIDS ; do kill $PID > /dev/null 2>&1 done echo "stop success! pid:"$PIDS cd $PWD