这篇文章主要为大家展示了Maven如何打包并生成运行脚本,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。

1.定义插件

<properties><maven-jar-plugin.version>2.4</maven-jar-plugin.version><maven-assembly-plugin.version>2.4</maven-assembly-plugin.version><maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version></properties><plugins> <!-- compiler --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven-compiler-plugin.version}</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration><executions><execution><phase>compile</phase><goals><goal>compile</goal></goals></execution></executions></plugin><!--jar plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><addMavenDescriptor>true</addMavenDescriptor><manifest><addClasspath>true</addClasspath><!--<mainClass></mainClass>--></manifest></archive><excludes><!--<exclude></exclude>--></excludes></configuration></plugin><!--assembly plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>${maven-assembly-plugin.version}</version><configuration><descriptors><descriptor>${project.basedir}/../assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>

2.assembly配置

<assembly><id>bin</id><formats><format>tar.gz</format></formats><dependencySets><!-- runtime scope jar --><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib</outputDirectory><unpack>false</unpack><scope>runtime</scope></dependencySet><!-- system scope jar --><dependencySet><useProjectArtifact>false</useProjectArtifact><outputDirectory>lib</outputDirectory><unpack>false</unpack><scope>system</scope></dependencySet></dependencySets><fileSets><!-- script --><fileSet><directory>${project.basedir}/../scripts</directory><outputDirectory>bin</outputDirectory><fileMode>0644</fileMode><directoryMode>0755</directoryMode><filtered>true</filtered></fileSet><!-- config --><fileSet><directory>${project.basedir}/src/main/resources</directory><outputDirectory>config</outputDirectory><fileMode>0644</fileMode><directoryMode>0755</directoryMode><includes><include>*.xml</include><include>*.json</include><include>*.properties</include></includes><filtered>true</filtered></fileSet><!-- the project jar --><fileSet><directory>${project.build.directory}</directory><outputDirectory>lib</outputDirectory><includes><include>*.jar</include></includes></fileSet><!-- Document --><fileSet><directory>${project.basedir}</directory><outputDirectory>doc</outputDirectory><includes><include>README*</include><include>LICENSE*</include><include>NOTICE*</include></includes></fileSet></fileSets></assembly>

3.脚本

#!/bin/sh#server id -- changeSERVER_ID=#java homeJAVA_HOME=#java commandJAVA_CMD=`which java`#jvm optionJVM_OPT="-Xmx1024M -Xms512M -server -XX:+PrintGCDetails -XX:+PrintGCDateStamps"#jar nameJAR=${project.artifactId}-${project.version}.jar#main classMAIN_CLASS=${MainClass}# main class argsARGS="${StartArgs}"#environmentENVIRONMENT=${profiles.environment}#cd working pathcd_working_path(){ cd `dirname $0` cd ..}#jarjar(){ WK_PATH=`pwd` /usr/bin/nohup ${JAVA_CMD} -Denvironment=${ENVIRONMENT} -Dlog4j.configurationFile=${WK_PATH}/config/log4j2.xml ${JVM_OPT} -cp ${WK_PATH}/lib/${JAR}:${WK_PATH}/lib/* ${MAIN_CLASS} ${ARGS} >/dev/null 2>&1 &}#get pidget_pid(){ echo `ps -ef | grep ${JAR} | grep server_id=${SERVER_ID} |grep -v 'grep' |awk '{print $2}'`}#checkcheck(){ #check server id if [ ! -n "$SERVER_ID" ];then echo "Please set up the server id 'SERVER_ID'" exit fi}#start servicestart(){ #check check #check pid PID=`get_pid` if [ -n "$PID" ];then echo "Process exists, PID >> "${PID} exit fi #check java if [ -n "$JAVA_HOME" ];then JAVA_CMD=${JAVA_HOME}/bin/java fi #start service ${JAVA_CMD} -version jar #check if [ $&#63; -ne 0 ];then echo "Service startup failed." exit fi #check service PID=`get_pid` if [ ! -n "$PID" ];then echo "Service startup failed." else echo "Service startup success, Current environment is ${ENVIRONMENT} , PID >> "${PID} fi}#stop servicestop(){ #check check #check pid PID=`get_pid` if [ ! -n "$PID" ];then echo "Process not exists." else kill ${PID} echo "Kill pid >> '$PID'" if [ $&#63; -ne 0 ];then echo "Service shutdown failed." exit else echo "Service shutdown success." fi fi}#restart servicerestart(){ #stop service stop COUNT=0 while true do PID=`get_pid` if [ ! -n "$PID" ];then #start service start break else let COUNT++ echo "Restarting..." if [ ${COUNT} -eq 3 ];then echo "Restart error" exit fi fi sleep 3 done}#check statestate(){ PID=`get_pid` if [ ! -n "$PID" ];then echo "Service not exists." else echo "Service status is normal, PID >> '$PID'" fi}#mainmain(){ #cd working path cd_working_path if [ ! -n "$1" ];then echo "***********************************************" echo "* start : Start service *" echo "* stop : Stop service *" echo "* restart : Restart service *" echo "* state : Check service state *" echo "***********************************************" read -p "Please choose >> ": CASE PARAMETER=${CASE} else PARAMETER=$1 fi case "$PARAMETER" in start) start ;; stop) stop ;; restart) restart ;; state) state ;; *) main ;; esac}main $1

PS:下面看下Maven打包生成可运行bat/sh脚本文件

利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台。

<plugin>   <groupId>org.codehaus.mojo</groupId>   <artifactId>appassembler-maven-plugin</artifactId> <version>1.1.1</version> <configuration>   <repositoryLayout>flat</repositoryLayout>   <repositoryName>lib</repositoryName>   <configurationSourceDirectory>src/main/resources/conf</configurationSourceDirectory>   <!-- Set the target configuration directory to be used in the bin scripts --> <configurationDirectory>conf</configurationDirectory> <!-- Copy the contents from "/src/main/config" to the target configuration directory in the assembled application --> <copyConfigurationDirectory>true</copyConfigurationDirectory> <!-- Include the target configuration directory in the beginning of the classpath declaration in the bin scripts --> <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath> <!-- prefix all bin files with "mycompany" --> <binPrefix>startup</binPrefix> <!-- set alternative assemble directory --> <assembleDirectory>${project.build.directory}/server</assembleDirectory> <!-- Extra JVM arguments that will be included in the bin scripts --> <extraJvmArguments>-Xms768m -Xmx768m -XX:PermSize=128m   -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m </extraJvmArguments> <!-- Generate bin scripts for windows and unix pr default --> <platforms>   <platform>windows</platform>    <platform>unix</platform> </platforms> <programs>   <program>   <mainClass>com.coderli.onecoder.server.HypervisorServer</mainClass>     <name>startup</name> </program> </programs>   </configuration></plugin>

然后选择要编译的工程,右键->maven build… 命令如下图:

package appassembler:assemble

然后执行run,一个可执行的脚本文件就生成好了。startup.bat是windows下的,startup.sh是linux下的

以上就是关于Maven如何打包并生成运行脚本的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。