当前位置: 首页 > 工具软件 > Maven Wagon > 使用案例 >

Wagon-maven-plugin 自动打包部署插件

时向文
2023-12-01

插件功能

打包后,根据插件配置,将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
  1. clean 后打包
  2. 上传打包文件到远端服务器
  3. 执行配置的命令集

配置方式的选择

个人更倾向第二种,因为可以避免只是想要 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配置项,跳过插件的执行。但是需要更改配置文件,还是不方便。

 类似资料: