简述
- 依赖插件:
maven-jar-plugin
maven-assembly-plugin
- 项目目录结构
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
<id>assembly</id>
<!-- 最终打包成一个用于发布的zip文件 -->
<formats>
<format>zip</format>
</formats>
<!-- Adds dependencies to zip package under lib directory -->
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<!-- 把项目的本地lib依赖 ,打包进zip文件的lib -->
<fileSet>
<directory>lib/</directory>
<outputDirectory>lib</outputDirectory>
<includes>
<include>*</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>config</outputDirectory>
<includes>
<include>*.yml</include>
<include>*.yaml</include>
<include>*.txt</include>
<include>*.xml</include>
</includes>
</fileSet>
<fileSet>
<directory>sql</directory>
<outputDirectory>sql</outputDirectory>
<includes>
<include>**</include>
</includes>
</fileSet>
<fileSet>
<!--启停脚本-->
<directory>bin</directory>
<outputDirectory>bin</outputDirectory>
<directoryMode>0777</directoryMode>
<fileMode>0777</fileMode>
<lineEnding>unix</lineEnding>
<includes>
<include>*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
插件配置(启动模块POM.XML)
<!-- 部分变量 -->
<properties>
<deploy.plugin.version>3.1.1</deploy.plugin.version>
<assembly.plugin.version>3.6.0</assembly.plugin.version>
<dependency.plugin.version>3.3.0</dependency.plugin.version>
<jar.plugin.version>3.2.2</jar.plugin.version>
</properties>
<!-- ........ -->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<finalName>AppName</finalName> <!--指定应用名 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${jar.plugin.version}</version>
<configuration>
<archive>
<manifest>
<!--mainClass标签配置启动类-->
<mainClass>path.to.*Application</mainClass>
<addClasspath>true</addClasspath>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addBuildEnvironmentEntries>true</addBuildEnvironmentEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${dependency.plugin.version}</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory> <!--默认输出目录在Target下--> <overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${assembly.plugin.version}</version>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${deploy.plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
结果
执行 mvn package
打包
压缩包目录
附录
service.sh脚本
#! /bin/bash
# init app environment
export APP_HOME=`cd $(dirname $0)/..; pwd`
PIDFILE=$APP_HOME/app.pid
# set java main class
MAIN_CLASS="path.to.*Application"
# set class path config and jar package
CLASSPATH=${CLASSPATH}:${APP_HOME}/config
CLASSPATH=${CLASSPATH}:${APP_HOME}/lib/*
# init java environment
export JAVA=$(which java)
if [ -z "$JAVA" ] ; then
echo "no java environment ... "
exit 1;
fi
# set java opt
JAVA_OPT=" ${JAVA_OPT} -cp ${CLASSPATH}"
JAVA_OPT=" ${JAVA_OPT} -XX:+UseConcMarkSweepGC"
JAVA_OPT=" ${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=75"
#JAVA_OPT=" ${JAVA_OPT} -XX:+UseCMSInitiatingOccupancyOnly"
#JAVA_OPT=" ${JAVA_OPT} -Dlog4j2.formatMsgNoLookups=true"
JAVA_OPT=" ${JAVA_OPT} -Dapp.home=${APP_HOME}"
#JAVA_OPT=" ${JAVA_OPT} -Dfastjson.parser.safeMode=true"
JAVA_OPT=" ${JAVA_OPT} ${MAIN_CLASS}"
check_process_file() {
if [ -f $PIDFILE ]
then
PID=$(cat $PIDFILE)
ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Process already running"
exit 1
fi
fi
}
start() {
# shell method
cd $APP_HOME
echo "starting program ... "
echo "$JAVA ${JAVA_OPT}"
nohup $JAVA ${JAVA_OPT} > /dev/null 2>&1 &
check_process_file
if [ $? -eq 0 ] ; then
if echo -n $! > "$PIDFILE" ; then
PID=$(cat $PIDFILE)
echo "The program[$PID] launch succeed"
else
exit 1
fi
else
exit 1
fi
}
stop() {
echo "Stopping program ... "
if [ ! -f "$PIDFILE" ]
then
echo "No program to stop (could not find file $PIDFILE)"
else
PID=$(cat "$PIDFILE")
kill -15 $PID
while [ 0 -ne $(ps | awk '{print $1}' | grep -v -i "pid" | grep $PID | wc -l) ]
do
echo -e ".\c"
sleep 1s
done
rm "$PIDFILE"
echo "The program[$PID] is stopped"
fi
}
if [ "$1" = "stop" ]; then
stop
elif [ "$1" = "start" ]; then
start
elif [ "$1" = "restart" ]; then
echo "restart..."
stop
start
else
echo "Usage [start|stop|restart]"
fi