这篇文章主要为大家展示了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 -- change SERVER_ID= #java home JAVA_HOME= #java command JAVA_CMD=`which java` #jvm option JVM_OPT="-Xmx1024M -Xms512M -server -XX:+PrintGCDetails -XX:+PrintGCDateStamps" #jar name JAR=${project.artifactId}-${project.version}.jar #main class MAIN_CLASS=${MainClass} # main class args ARGS="${StartArgs}" #environment ENVIRONMENT=${profiles.environment} #cd working path cd_working_path(){ cd `dirname $0` cd .. } #jar jar(){ 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 pid get_pid(){ echo `ps -ef | grep ${JAR} | grep server_id=${SERVER_ID} |grep -v 'grep' |awk '{print $2}'` } #check check(){ #check server id if [ ! -n "$SERVER_ID" ];then echo "Please set up the server id 'SERVER_ID'" exit fi } #start service start(){ #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 [ $? -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 service stop(){ #check check #check pid PID=`get_pid` if [ ! -n "$PID" ];then echo "Process not exists." else kill ${PID} echo "Kill pid >> '$PID'" if [ $? -ne 0 ];then echo "Service shutdown failed." exit else echo "Service shutdown success." fi fi } #restart service restart(){ #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 state state(){ PID=`get_pid` if [ ! -n "$PID" ];then echo "Service not exists." else echo "Service status is normal, PID >> '$PID'" fi } #main main(){ #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如何打包并生成运行脚本的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。