例如如图所示的父子工程
common模块是放置一些全局可用的工具类或者配置类
service模块是具可运行的springboot模块
<!--定义父工程-->
<!--表明整个项目用的是springboot工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--注册子工程-->
<modules>
<module>common</module>
<module>service</module>
</modules>
<!--本工程信息-->
<modelVersion>4.0.0</modelVersion>
<groupId>com.platform</groupId>
<artifactId>platform_parent</artifactId>
<!--用于管理子模块,且无入口程序,打包为pom-->
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>platform_parent</name>
<!--版本管理,限定工程所用的所有依赖的版本-->
<properties>
</properties>
<!--具体依赖-->
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
非运行模块的 父 pom.xml
引入所有非运行模块需要的依赖(依赖不可以隔代传递,只能父传子,不能爷传孙)
<!--指明自己父亲是谁-->
<parent>
<artifactId>platform_parent</artifactId>
<groupId>com.platform</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!--本模块-->
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>common</name>
<!--管理子模块,无入口程序,打包为pom-->
<packaging>pom</packaging>
<!--注册子模块-->
<modules>
<module>common_utils</module>
<module>service_base</module>
<module>spring_security</module>
</modules>
<dependencies>
</dependencies>
<parent>
<artifactId>common</artifactId>
<groupId>com.platform</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
!!!重点,非运行模块需要被运行模块引入,所以把它打包为jar包
<!--非程序入口模块需要打包为jar-->
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<artifactId>common_utils</artifactId>
<dependencies>
</dependencies>
<parent>
<artifactId>platform_parent</artifactId>
<groupId>com.platform</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--管理子模块,无入口程序,打包为pom-->
<packaging>pom</packaging>
<!-- 定义子模块 -->
<modules>
<module>acl</module>
</modules>
<dependencies>
!!!这里要引入好子模块需要的依赖,不需要写版本号,因
为继承了parent的依赖,只是因为依赖不能爷传孙,需要这
里引入,才能借助爷传父,父传孙!!!
</dependencies>
<!--打包规则,可以继承给acl等子模块,子模块就不用再写-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml
**/ *.properties</include>
<include>**/*.xml
false
src/main/resources
**/ *.yml</include>
<include>**/*.properties
**/ *.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
<parent>
<artifactId>service</artifactId>
<groupId>com.platform</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>acl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--项目入口程序,需要打包为jar-->
<packaging>jar</packaging>
<dependencies>
</dependencies>
<!--maven的打包插件,可运行模块必须加入这个打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.2.1.RELEASE</version>
</plugin>
</plugins>
</build>
最后BUILD SUCCESS,表示打包成功,若有报错,自己查看报错信息,然后去搜索解决
1.去项目文件夹下,“可运行模块”的目录下在target文件夹中找到打包好的jar包,是“可运行模块”下,才是你真正要部署的服务
2.如果使用的是云服务器,联系系统管理员,在控制台开放项目的端口,否则如何都不能访问此端口!
先查看自己要部署的端口号是否被占用,输入
lsof -i:端口号
如果出现下图,说明被占用,则只能去修改该项目端口号,再重新打包部署
然后,
①输入命令开启防火墙
systemctl start firewalld
②开放指定端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
命令含义:
–zone #作用域
–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
③重启防火墙
firewall-cmd --reload
如果嫌每个服务都要操作防火墙麻烦,可以关闭防火墙,但是系统会不安全
关闭防火墙:
systemctl stop firewalld.service
④测试远程端口是否开放:
在本地window的cmd中输入
telnet ip 端口号 (如如telnet 172.17.193.18 8080)
然后回车,如果窗口跳转,说明此端口已开放。
用 xftp 和 xShell 连接到linux远程系统,将jar包复制到项目文件夹下,打开终端,在jar包目录下后台启动jar包,输入指令,然后按crtl +c,项目就会在后台启动
nohup java -jar acl-0.0.1-SNAPSHOT.jar >logs.txt &
logs.txt表示控制台输出文件
如果上面那个失败,可以用简单的,但是没有控制台的输出文件
(1)执行java -jar xxx.jar,终端会输出一些东西
(2)ctrl+z 退出到控制台,输入指令 bg,便可后台运行
(3)exit,断开linux连接(非必要)
完成以上3步,退出SHELL后,jar服务一直在后台运行。
在浏览器或swagger随意访问一个可访问的接口url,如果成功,则部署成功
如果需要用指定jvm参数执行jar包:
#直接启动
java -jar -Xms128M -Xmx256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M acl-0.0.1-SNAPSHOT.jar
#后台启动,日志输出到logs.txt中
nohup java -jar -Xms128M -Xmx256M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M acl-0.0.1-SNAPSHOT.jar >logs.txt &
Xms : 堆内存初始大小
Xmx : 堆内存最大值
PermSize : 永久内存初始大小
MaxPermSize : 永久内存最大值
4.如果项目更新、关闭运行等,使用下面命令查看运行的项目的进程id(pid)
lsof -i:端口号
然后输入以下,杀死该进程,注意是pid,不要输错输成端口号!
kill -9 21238
把之前运行的jar包和日志文件删除。
然后重复步骤3,就能重新部署
最后,如果中间环节出错,请自寻搜索解决,大致打包部署流程如上