Maven打包并生成运行脚本的示例代码

 更新时间:2020年07月22日 11:30:52   作者:sic777  
这篇文章主要介绍了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打包并生成运行脚本的文章就介绍到这了,更多相关Maven打包并生成运行脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基于Scanner对象的简单输入计算功能示例

    Java基于Scanner对象的简单输入计算功能示例

    这篇文章主要介绍了Java基于Scanner对象的简单输入计算功能,结合实例形式分析了Java使用Scanner对象获取用户输入半径值计算圆形面积功能,需要的朋友可以参考下
    2018-01-01
  • 解决springcloud集成nacos遇到的问题

    解决springcloud集成nacos遇到的问题

    这篇文章介绍了如何解决springcloud集成nacos遇到的问题,文章中有详细的代码示例,需要的朋友可以参考一下
    2023-04-04
  • Java如何在List或Map遍历过程中删除元素

    Java如何在List或Map遍历过程中删除元素

    相信大家在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入“陷阱”导致遗漏或者程序异常。下面这篇文章将会给大家详细介绍Java如何在List和Map遍历过程中删除元素,有需要的朋友们可以参考借鉴。
    2016-12-12
  • 最新hadoop安装教程及hadoop的命令使用(亲测可用)

    最新hadoop安装教程及hadoop的命令使用(亲测可用)

    这篇文章主要介绍了最新hadoop安装教程(亲测可用),本文主要讲解了如何安装hadoop、使用hadoop的命令及遇到的问题解决,需要的朋友可以参考下
    2022-06-06
  • Retrofit+Rxjava下载文件进度的实现

    Retrofit+Rxjava下载文件进度的实现

    这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • Java agent的入门与demo演示详解

    Java agent的入门与demo演示详解

    Java Agent 是 Java 1.5 版本之后引⼊的特性,其主要作⽤是在class被加载之前对其拦截,这篇文章主要介绍了agent的简单使用,需要的可以参考下
    2023-05-05
  • Java Date类常用示例_动力节点Java学院整理

    Java Date类常用示例_动力节点Java学院整理

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用,需要的朋友可以参考下
    2017-05-05
  • spring获取bean的源码解析

    spring获取bean的源码解析

    这篇文章主要介绍了spring获取bean的源码解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Gradle构建多模块项目的方法步骤

    Gradle构建多模块项目的方法步骤

    这篇文章主要介绍了Gradle构建多模块项目的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • java文件输出流写文件的几种方法

    java文件输出流写文件的几种方法

    这篇文章主要介绍了java文件输出流写文件的几种方法,需要的朋友可以参考下
    2014-04-04

最新评论