Maven打包部署教程


一、工程打包

1. 项目打包

想要将项目部署到服务器上,首先就要将项目打包成 JAR 包,但是通过 maven 打包我们只需要两步,首先先运行 clean 然后再运行 package 即可。

完成打包之后在项目目录下会生成 target 目录,其中 xxx.jar 就是我们要的 JAR 包。

2. 打包配置

默认打包项目的 YML 配置文件是内置在 JAR 中的,这种方式在仅修改配置的情况下也需要将整个工程重新打包更新,维护起来相对较为繁琐。因此通常在打包时选择排除 YML 文件,后续即使需要修改配置也无需重新打包只需重启服务即可生效。

若需将配置文件外置,则在 pom.xml 文件中添加如下内容,部署时将配置文件与 JAR 包置于同级目录即可。

<!-- 只在项目打包时添加,本地启动时注释该部分 -->
<build>
    <resources>
        <resource>
            <directory>src\main\resources</directory>
            <excludes>
                <exclude>application.yml</exclude>
            </excludes>
        </resource>
    </resources>
</build>

二、脚本配置

1. 上传文件

如果你使用的是默认的打包方式,那么直接上传文件到服务器即可。

如果你在打包时你设置了外置配置文件,那么需要将 application.yml 文件与 jar 包上传到同级目录下。

2. 启动脚本

为了方便项目启动,新建一个启动脚本 start.sh 用于快速运行项目。

脚本内容很简单,先查询项目是否运行,如果是则先通过 kill 命令停止,如果不是则启动项目,同时将运行日志输出到同级目录的 application-info.log 文件中。

需要注意如果在最后启动命令中没有使用 $(pwd) 而是使用相对路径则启动之后通过 jps 命令查看进程得到的进程名为 -jar,需要通过 jps -l 查看。

# 创建启动脚本
vi start.sh

#!/bin/bash 
# 替换 jar 包名称
APP_NAME=spring-test-1.0.0-SNAPSHOT.jar

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -9 $tpid
fi

# 检查进程是否已结束
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -9 $tpid
else
echo 'Stop Procecss Successfully!'
echo 'Start Procecss...'

# 后台启动程序
nohup java -jar $(pwd)/$APP_NAME > application-info.log 2>&1 &
fi

3. 停止脚本

同理再新建一个停止脚本文件 stop.sh

# 创建停止脚本
vi stop.sh

#!/bin/sh
# 将 spring-test-1.0.0-SNAPSHOT.jar 修改为自己的 jar 包名
APP_NAME=spring-test-1.0.0-SNAPSHOT.jar

PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi

4. 工程启动

完成脚本创建之后启动和停止服务直接运行脚本即可。

(1) 文件授权

在运行脚本之前需要给脚本文件授予可执行文件。

chmod +x start.sh

chmod +x stop.sh        
(2) 项目启动

运行启动脚本之后通过 jps 查看 Java 进程,如果能看到你的 jar 包表明启动成功。

# 项目启动
./start.sh             

# 项目停止
./stop.sh    

# 查看进程
jps           

三、Docker部署

在上面的例子中通过预先的脚本文件在服务器上运行 JAR 文件,当然你也可以选择自行构建镜像再由 Docker 进行部署。

1. 环境准备

首先当然需要在服务器上安装 Docker 环境,可以参考之前的文章,这里不再详述介绍。

在开始之前先将替换 Docker 的镜像地址以便后续构建。

# 编辑文件
vi /etc/docker/daemon.json

{
    "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}

# 刷新并重启
systemctl daemon-reload
systemctl restart docker

2. 配置文件

新建 Dockerfile 文件,配置容器镜像的基本信息。

其中 ADD 为项目 Jar 包指定别名, EXPOSE 为程序向外开放服务的端口。

vi Dockerfile

# 文件内容
FROM java:8
VOLUME /tmp
ADD demo-1.0.0-SNAPSHOT.jar demo.jar
EXPOSE 9090
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]

3. 构建镜像

将程序 Jar 包上传到 Dockerfile 同级目录,通过 build 命令构建镜像。

这里我指定了镜像名称为 demo ,版本号为:1.0

# 构建镜像
docker build -t demo:1.0 .

# 查看已有镜像
docker images       

4. 服务启动

完成镜像构建之后通过 run 命令直接运行即可。

docker run -d \
--name demo \
-p 9090:9090 \
demo:1.0

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录