通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包、将包文件传到服务器、SSH连上服务器、敲命令启动程序等一系列繁琐的步
骤。实际上这些步骤都可以通过Maven的一个插件wagon-maven-plugin来自动完成。
文件上传到服务器
Maven项目可使用mvn package指令打包,打包完成后包位于target目录下,要想在远程服务器上部署,首先要将包上传到服务器。
在项目的pom.xml中配置
wagon-maven-plugin插件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | <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> 				<fromFile>target/test.jar</fromFile> 				<url>scp://user:password@192.168.20.128/home/xxg/Desktop</url> 			</configuration> 		</plugin> 	</plugins> </build>
   | 
 
target/test.jar是要上传到服务器的文件,一般来说是jar或者war包,scp://user:password@192.168.20.128/home/xxg/Desktop配置服务器的用户、
密码、地址以及文件上传的目录。
配置完成后,运行命令:
1
   | mvn clean package wagon:upload-single
   | 
package、wagon:upload-single分别对项目进行打包和上传操作。命令运行结束后,文件就会成功上传到Linux服务器。
在服务器上执行Linux命令
部署项目不仅要把包传上服务器,而且还需要执行一些指令来启动程序。在程序启动之前,可能还需要将原来的程序关闭。
运行jar文件
启动jar包通常会使用java -jar test.jar命令,可以将命令配置在pom.xml中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | <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> 				<fromFile>target/test.jar</fromFile> 				<url>scp://user:password@192.168.20.128/home/xxg/Desktop</url> 				<commands> 					<!-- 杀死原来的进程 --> 					<command>pkill -f test.jar</command> 					<!-- 重新启动test.jar,程序的输出结果写到nohup.out文件中 --> 					<command>nohup java -jar /home/xxg/Desktop/test.jar > /home/xxg/Desktop/nohup.out 2>&1 &</command> 				</commands> 				<!-- 显示运行命令的输出结果 --> 				<displayCommandOutputs>true</displayCommandOutputs> 			</configuration> 		</plugin> 	</plugins> </build>
   | 
 
配置完成后,运行命令:
1
   | mvn clean package wagon:upload-single wagon:sshexec
   | 
package、wagon:upload-single、wagon:sshexec分别对项目进行打包、上传、运行command命令的操作。命令运行结束后,在服务器上查看进程ps -ef|grep test.jar,
或者查看nohup.out文件,就可以看到Java程序在服务器上已经启动。
上传war包并启动Tomcat
如果是Web应用,可使用服务器上的Tomcat来部署。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | <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> 				<fromFile>target/javawebdeploy.war</fromFile> 				<!-- 上传到Tomcat的webapps目录下 --> 				<url>scp://user:password@192.168.20.128/coder/tomcat/apache-tomcat-7.0.55/webapps</url> 				<commands> 					<!-- 重启Tomcat --> 					<command>sh /coder/tomcat/apache-tomcat-7.0.55/bin/shutdown.sh</command> 					<command>rm -rf /coder/tomcat/apache-tomcat-7.0.55/webapps/javawebdeploy</command> 					<command>sh /coder/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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
   | <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> 						<fromFile>target/javawebdeploy.war</fromFile> 						<url>scp://user:password@192.168.20.128/coder/tomcat/apache-tomcat-7.0.55/webapps</url> 						<commands> 							<command>sh /coder/tomcat/apache-tomcat-7.0.55/bin/shutdown.sh</command> 							<command>rm -rf /coder/tomcat/apache-tomcat-7.0.55/webapps/javawebdeploy</command> 							<command>sh /coder/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。