多模块maven+springboot项目打jar包,运行,部署linux(centos)服务器

1.项目maven结构:

项目地址:

https://github.com/KouReal/Rpc-Netty-Registry

 2.之前没有在pom.xml中添加spring-boot-maven-build插件,只有在父工程的pom.xml中写了maven-compiler-plugin这个插件,所以项目只能在eclipse中选中主类run as java application,后来添加了(父工程和子模块都添加了):

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.8.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3.之后可以在cmd切到项目某个模块的根目录,比如RegistryCenter(启动优先级最高),运行mvn clean package -Dmaven.test.skip=true打包,运行mvn spring-boot:run -Dmaven.test.skip=true运行(界面显示初次运行会下载很多springboot-core文件还有其他的slfj等等插件,在eclipse中运行不会显示)

 注意:错误命令演示:使用java命令没有用到spring-boot的maven插件,所以会报错:“NoClassDefFoundError”

 后来参考官方文档,学习到了mvn spring-boot:repackage命令,通过这个命令打包,可以使用java -jar运行,

 于是对这个模块使用:mvn spring-boot:repackage -Dmaven.test.skip=true

结果:

 查stackoverflow,应该用:mvn clean install spring-boot:repackage -Dmaven.test.skip=true

 然后可以在target目录用java -jar运行jar包了:

 使用repackage命令的作用是对原始的maven打包好的jar文件或war文件进一步打包,添加一些运行时的依赖资源,生成一个更大的jar 包,这个jar包就可以用java -jar运行了。

 在linux中运行jar包的命令:  java -jar xx.jar

后台nohup运行,同时将标准输出和错误重定向:  nohup java -jar xx.jar >xx.log 2>1& &

停止jar包的运行:

(1)pid=`ps -ef | grep xx | grep -v grev | awk '{print $2}'`

(2)kill -9 pid

编写shell脚本实现:启动,停止,重启,状态

#!/bin/bash
export JAVA_HOME=/root/tools/jdk1.8.0_181
export JRE_HOME=/$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=/root/app/springBoot/robotcenter.jar
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh robotcenter.sh [start|stop|restart|status]"
    exit 1
}
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
  #如果不存在返回1,存在返回0   
  if [ -z "${pid}" ]; then
  return 1
  else
    return 0
  fi
''
}
#启动方法
start(){
  is_exist
  if [ $? -eq 0 ]; then
    echo "${APP_NAME} is already running. pid=${pid}"
  else
    nohup java -jar ${APP_NAME}  >robotcenter.out 2>&1 &
  fi
}
#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi 
}
#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}
#重启
restart(){
  stop
  sleep 5
  start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

 查看日志:

cat xx.log,   less,  more都不能动态看到日志的变化,

tail -f xx.log可以动态看到日志变化

原文地址:https://www.cnblogs.com/CreatorKou/p/11504387.html