使用wagon-maven-plugin部署Java项目到远程服务器

在项目开发过程中,经常需要部署代码到开发环境,每天可能有好多次,每次都需要mvn clean install,然后上传到服务器。实际上这些繁琐的步骤可以通过一个Maven插件wagon-maven-plugin来自动完成。

配置Linux服务器用户名和密码

为了让wagon-maven-plugin插件能SSH连上Linux服务器,首先需要在Maven的配置文件settings.xml中配置好server的用户名和密码。

<servers>
    <server>
        <id>linux-server-dev</id>
        <username>root</username>
        <password>123456</password>
    </server>
</servers>

文件上传到服务器

Maven项目可使用 mvn package 指令打包,打包完成后包位于target目录下,要想在远程服务器上部署,首先要将包上传到服务器。在项目的pom.xml中配置wagon-maven-plugin插件:

<build>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.8</version>
		</extension>
	</extensions>
	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>wagon-maven-plugin</artifactId>
			<version>1.0</version>
			<configuration>
				<serverId>linux-server-dev</serverId>
				<!-- serverId即上一步中在settings.xml中配置的service的id -->
				<fromFile>target/project_name.jar</fromFile>
				<!-- 要上传到服务器的文件,一般来说是jar或者war包 -->
				<url>scp://192.168.1.1/home/project_name/</url>
				<!-- 配置服务器的地址以及文件上传的目录。 -->
			</configuration>
		</plugin>
	</plugins>
</build>

配置完成后,运行命令:mvn clean package wagon:upload-single

重启服务

部署项目不仅要把包传上服务器,而且还需要执行一些指令来重启服务。通常我们会把重启命令写入到一个脚本中,然后通过执行脚本来重启服务。

新建 restart.sh 文件,一般把改文件放在当前项目下,因为每个项目的启动脚本都不一样

#!/bin/bash

ps -ef | grep a8admin | grep qa |awk '{print $2}' |xargs kill -9
sleep 1
nohup java -jar -Dspring.profiles.active=qa -Dserver.port=8083 a8admin-api-1.0-RELEASE.jar >> 8083.log 2>&1 &
tail -f 8083.log
<build>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.8</version>
		</extension>
	</extensions>
	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>wagon-maven-plugin</artifactId>
			<version>1.0</version>
			<configuration>
				<serverId>linux-server-dev</serverId>
				<fromFile>target/project_name.jar</fromFile>
				<url>scp://192.168.20.128/home/project_name/</url>
				<commands>
					<command>sh ./restart.sh</command>
				</commands>
				<!-- 显示运行命令的输出结果 -->
				<displayCommandOutputs>true</displayCommandOutputs>
			</configuration>
		</plugin>
	</plugins>
</build>

配置完成后,运行命令:mvn clean package wagon:upload-single wagon:sshexec

上传war包并启动Tomcat

如果是Web应用,可使用服务器上的Tomcat来部署。

<build>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.8</version>
		</extension>
	</extensions>
	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>wagon-maven-plugin</artifactId>
			<version>1.0</version>
			<configuration>
				<serverId>linux-server-dev</serverId>
				<fromFile>target/project_name.war</fromFile>
				<!-- 上传到Tomcat的webapps目录下 -->
				<url>scp://192.168.20.128/home/project_name/</url>
				<commands>
					<!-- 重启Tomcat -->
					<command>sh /home/tomcat/apache-tomcat-7.0.55/bin/shutdown.sh</command>
					<command>rm -rf /home/tomcat/apache-tomcat-7.0.55/webapps/javawebdeploy</command>
					<command>sh /home/tomcat/apache-tomcat-7.0.55/bin/startup.sh</command>
				</commands>
				<displayCommandOutputs>true</displayCommandOutputs>
			</configuration>
		</plugin>
	</plugins>
</build>

完成以上配置后,同样可通过 mvn clean package wagon:upload-single wagon:sshexec 命令自动部署。

配置execution

如果你觉得 mvn clean package wagon:upload-single wagon:sshexec 命令太长了不好记,那么可以配置execution,在运行package打包的同时运行upload-single和sshexec。

<build>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.8</version>
		</extension>
	</extensions>
	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>wagon-maven-plugin</artifactId>
			<version>1.0</version>
			<executions>
				<execution>
					<id>upload-deploy</id>
					<!-- 运行package打包的同时运行upload-single和sshexec -->
					<phase>package</phase>
					<goals>
						<goal>upload-single</goal>
						<goal>sshexec</goal>
					</goals>
					<configuration>
						<serverId>linux-server-dev</serverId>
						<fromFile>target/project_name.war</fromFile>
						<url>scp://192.168.20.128/home/tomcat/apache-tomcat-7.0.55/webapps</url>
						<commands>
							<command>sh /home/tomcat/apache-tomcat-7.0.55/bin/shutdown.sh</command>
							<command>rm -rf /home/tomcat/apache-tomcat-7.0.55/webapps/javawebdeploy</command>
							<command>sh /home/tomcat/apache-tomcat-7.0.55/bin/startup.sh</command>
						</commands>
						<displayCommandOutputs>true</displayCommandOutputs>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

配置完成后,即可使用 mvn clean package 来代替 mvn clean package wagon:upload-single wagon:sshexec

欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com

简书主页:https://www.jianshu.com/u/756c9c8ae984

segmentfault主页:https://segmentfault.com/blog/jouypub

腾讯云主页:https://cloud.tencent.com/developer/column/72548

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏日常分享

Git 命令基本应用

提交已经Tracked的文件:git commit -m "commit words"

1154
来自专栏進无尽的文章

代码管理| 本地Git仓库和远程仓库的创建及关联

顺便说一下:Github账号创建私人项目的话需要付费,可以在码云上面创建个人私有仓库,是免费的。

2.1K2
来自专栏小文博客

VUTLR定时创建快照(Take Snapshot)备份服务器

3515
来自专栏北京马哥教育

Nginx的安装和多域名配置

作者:白夜船长 来源:http://blog.csdn.net/zzq900503/article/details/70049348 Nginx安装 cento...

4655
来自专栏Angular&服务

修改服务器主机名称

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invi...

1372
来自专栏杂烩

Redis linux下安装配置 原

make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-sta...

722
来自专栏Python中文社区

Linux进程监控工具Supervisor简易使用教程

專 欄 ❈ gw1770df,Python中文社区专栏作者,从事Python开发工作,全栈工程师。 博客: https://word.gw1770df.cc ...

3746
来自专栏程序员互动联盟

Ubuntu14.04 Chromium 编译

1、下载depot_tools: 首先安装 git-core: sudo apt-get install git-core 执行命令: git ...

3837
来自专栏jouypub

使用forever管理NodeJs应用

forever是一个简单的命令式nodejs的守护进程,能够启动,停止,重启App应用。forever完全基于命令行操作,在forever进程之下,创建node...

2483
来自专栏电光石火

python3和python2共存

特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开发,环境有Python2和 py...

2338

扫码关注云+社区

领取腾讯云代金券