打包后,根据插件配置,将package上传到远端,并可以选择执行指定命令集。配置项足够充分,可以达到打包后自动部署的功能。
提供两种配置方式,POM如下:
<project>
<!-- 配置环境信息 -->
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<user>user</user>
<password>pwd</password>
<ip>ip:port</ip>
<active>dev</active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<!-- Package 自动上传服务器插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>upload-deploy</id>
<phase>package</phase>
<goals>
<goal>upload-single</goal>
<goal>sshexec</goal>
</goals>
<configuration>
<!-- 指定上传文件: target/artifactId-version.jar -->
<fromFile>target/${project.artifactId}-${project.version}.jar</fromFile>
<!-- scp协议传输:username:password@ip/destinationPath-->
<url>scp://${user}:${password}@${ip}/.../server/jars</url>
<!-- scp传输完毕后执行的命令 -->
<commands>
<!-- 1) 备份旧包 -->
<command>
cp /.../${project.artifactId}-${project.version}.jar /.../${project.artifactId}-${project.version}.jar.bak
</command>
<!-- 2) 执行脚本 -->
<command>sh /.../start.sh restart ${project.artifactId}</command>
</commands>
<!-- 显示执行命令的输出结果 -->
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</execution>
</executions>
</plugin>
</project>
<project>
<!-- 配置环境信息 -->
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<user>user</user>
<password>pwd</password>
<ip>ip:port</ip>
<active>dev</active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
<!-- Package 自动上传服务器插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<!-- 指定上传文件: target/artifactId-version.jar -->
<fromFile>target/${project.artifactId}-${project.version}.jar</fromFile>
<!-- scp协议传输:username:password@ip/destinationPath-->
<url>scp://${user}:${password}@${ip}/.../server/jars</url>
<!-- scp传输完毕后执行的命令 -->
<commands>
<!-- 1) 备份旧包 -->
<command>
cp /.../${project.artifactId}-${project.version}.jar /.../${project.artifactId}-${project.version}.jar.bak
</command>
<!-- 2) 执行脚本 -->
<command>sh /.../start.sh restart ${project.artifactId}</command>
</commands>
<!-- 显示执行命令的输出结果 -->
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</plugin>
</project>
每次想要打包后上传到服务器,并执行指定命令集,需要执行命令组:
mvn clean package wagon:upload-single wagon:sshexec
个人更倾向第二种,因为可以避免只是想要 package 或 install 到本地但又不想上传到远端的情况。相对的,命令执行起来比较繁琐。但是如果使用例如idea这样的开发工具,完全可以将命令组保存为一个maven启动配置项,每次仅需要通过该配置项启动即可。
说回第一种方式,是否有办法可以在不发布到远端服务器的情况下,进行打包?可以这样:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<skip>true</skip>
...
</configuration>
</plugin>
通过配置skip配置项,跳过插件的执行。但是需要更改配置文件,还是不方便。