如何在10个不同环境部署Maven构建的独立Jar包?
Maven独立Jar包多环境构建部署全流程指南
我来帮你梳理一下这个Maven独立Jar包的多环境构建部署流程,结合你提到的WinSCP和Putty工具,给你一步步的实操指导:
一、不同环境的构件生成策略
首先要解决“不同环境下构件如何生成”的问题——你需要用Maven的Profile功能来区分不同环境的配置(比如数据库连接、日志级别、接口地址等),避免每次打包都手动修改配置文件。
具体步骤:
- 在项目的
src/main/resources下创建不同环境的配置文件夹,比如config-dev、config-test、config-prod,每个文件夹下放对应环境的配置文件(如application.properties)。 - 在
pom.xml中定义对应的Profile,指定每个Profile要加载的配置文件:
<profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <resources> <resource> <directory>src/main/resources/config-dev</directory> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>config-*</exclude> </excludes> </resource> </resources> </build> </profile> <profile> <id>test</id> <build> <resources> <resource> <directory>src/main/resources/config-test</directory> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>config-*</exclude> </excludes> </resource> </resources> </build> </profile> <!-- 其他环境的Profile以此类推 --> </profiles>
- 打包时指定对应环境的Profile,生成专属Jar包:
# 生成开发环境Jar mvn clean package -Pdev # 生成测试环境Jar mvn clean package -Ptest # 生成生产环境Jar mvn clean package -Pprod
这样生成的Jar包会包含对应环境的配置,直接部署即可,无需额外修改。
二、Jar包的正确获取方式:别从Eclipse或Tortoise SVN复制!
绝对不建议从Eclipse的target目录或者Tortoise SVN中复制Jar包,原因如下:
- Eclipse本地编译的Jar可能依赖本地环境(比如JDK版本、Maven配置差异),无法保证和其他构建环境的一致性;
- SVN是用来存储源码的,构建产物(Jar包)属于编译生成的文件,不应该提交到版本控制仓库,会占用存储空间且容易导致版本混乱。
正确的做法是:
- 搭建一台统一的构建机器(或者用CI工具如Jenkins),在这台机器上拉取最新源码,执行上面的Maven命令生成对应环境的Jar包;
- 所有环境的部署Jar都从这台构建机器的
target目录获取,或者把Jar包上传到内部构件仓库(如Nexus),部署时从仓库下载,这样能保证所有环境的Jar包是完全一致的。
三、用WinSCP+Putty完成多环境部署实操
假设你已经拿到了对应环境的Jar包,接下来用WinSCP和Putty完成部署:
1. 准备工作
- 每个环境的服务器信息:IP地址、登录用户名、密码/SSH密钥;
- 服务器上的应用部署目录(比如
/opt/my-app),提前创建好; - 编写好应用的启停脚本(可选但推荐,避免手动输入长命令):
stop.sh:停止应用进程#!/bin/bash PID=$(ps aux | grep my-app.jar | grep -v grep | awk '{print $2}') if [ -n "$PID" ]; then kill -9 $PID echo "应用已停止,PID: $PID" else echo "应用未运行" fistart.sh:后台启动应用#!/bin/bash nohup java -jar my-app.jar > app.log 2>&1 & echo "应用已启动,日志文件:app.log"
chmod +x stop.sh start.sh
2. WinSCP上传Jar包
- 打开WinSCP,新建会话,填入对应环境服务器的IP、用户名、密码/密钥,连接服务器;
- 本地定位到构建好的Jar包所在目录,远程定位到服务器的部署目录;
- 拖拽Jar包到远程目录,完成上传(如果Jar包正在运行,先停止服务再替换)。
3. Putty执行部署操作
- 打开Putty,连接对应环境的服务器;
- 进入部署目录:
cd /opt/my-app; - 停止旧版本应用:
./stop.sh; - (可选)备份旧Jar包:
mv my-app.jar my-app.jar.old.$(date +%Y%m%d); - 启动新版本应用:
./start.sh; - 验证应用是否启动成功:
ps aux | grep my-app.jar,或者查看日志:tail -f app.log。
四、多环境部署的最佳实践
- 用CI/CD工具(如Jenkins)自动化构建部署:配置流水线,拉取源码→按环境打包→自动上传到服务器→启停应用,完全替代手动操作,减少出错;
- 给Jar包加上版本号和环境标识:比如
my-app-1.0.0-dev.jar,方便区分版本和环境,避免覆盖错误; - 配置文件外置:如果不想为每个环境重新打包,可以把配置文件放在Jar包外,启动时指定配置文件路径:
java -jar my-app.jar --spring.config.location=/opt/my-app/config/application.properties(Spring Boot应用为例); - 使用SSH密钥登录:代替密码登录,更安全且无需重复输入密码;
- 每个环境的部署流程标准化:统一脚本、统一目录结构,降低维护成本。
内容的提问来源于stack exchange,提问作者user9193174
相关产品推荐
相关产品推荐

