pom文件里追加下面的操作可以自动发布:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>wagon-maven-plugin</artifactId> <version>1.0</version> <configuration> <fromFile>target/${pack-name}</fromFile> <url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url> <commands> <!-- Kill Old Process --> <command>kill -9 `ps -ef |grep ${project.artifactId}.jar|grep -v "grep" |awk '{print $2}'`</command> <!-- Restart jar package,write result into renren.log --> <command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=test > ${service-path}/sanshu.log 2>&1 & ]]></command> <command><![CDATA[netstat -nptl]]></command> <command><![CDATA[ps -ef | grep java | grep -v grep]]></command> </commands> <!-- 运行命令 mvn clean package wagon:upload-single wagon:sshexec--> <displayCommandOutputs>true</displayCommandOutputs> </configuration> </plugin>
这段POM (Project Object Model) 代码配置了一个 Maven 插件,wagon-maven-plugin,用于在 Maven 构建过程中执行远程操作,例如上传文件和执行远程服务器上的命令。以下是详细解释:
groupId & artifactId: 这些元素指定了插件的 Maven 坐标。对于此段代码,它指定了 wagon-maven-plugin,一个由 org.codehaus.mojo 组提供的 Maven 插件。
version: 插件版本号为 1.0。
configuration: 配置部分详细指定了插件的运行配置。
第一个命令用于杀死旧的进程,通过查找包含项目的 artifactId 在其命令行中的 Java 进程。
第二个命令重启 jar 包,并将输出重定向到一个日志文件中。
第三个和第四个命令分别用于检查网络端口的监听状态和查找运行中的 Java 进程。
fromFile: 指定了要上传的文件。这里使用了 Maven 属性 ${pack-name} 来动态指定文件名。这意味着你可以在 Maven 的配置文件中指定 pack-name 的值,它将被解析并用于替换这个占位符。
url: 指定了文件上传的目标 URL。这里使用了 scp 协议(安全复制协议),并且动态插入了多个 Maven 属性,包括远程服务器的用户名、密码、地址以及服务路径。这些都被包含在 CDATA 区域内,允许包含特殊字符而不被 XML 解析器处理。
commands: 定义了一系列在远程服务器上执行的命令。
displayCommandOutputs: 设置为 true,意味着插件会显示每个执行命令的输出。
运行命令: 注释中提到的命令 mvn clean package wagon:upload-single wagon:sshexec 说明了如何使用这个插件。clean package 会清理旧的构建并创建一个新的包,wagon:upload-single 会上传这个包到配置的远程位置,而 wagon:sshexec 会在远程服务器上执行配置的命令序列。
总之,这段代码配置的 Maven 插件提供了一种机制,通过它,开发者可以在构建过程中自动化地上传文件到远程服务器,并在服务器上执行一系列预定义的命令,例如重启应用程序。这种自动化可以显著提高部署效率,特别是在持续集成/持续部署(CI/CD)流程中。