对于菜鸟来说,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,可以同时指定多个打包格式。
基本配置已经完成。推荐阅读
assembly-plugin 打包的配置和Apache Maven Project
在项目根路径下使用命令
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