maven插件wagon-ssh、os-maven-plugin、buildnumber-maven-plugin使用详解

文章目录

  • 前言
  • 一、os-maven-plugin的使用
  • 二、buildnumber-maven-plugin使用
    • 1、时间戳策略
    • 2、数字策略
  • 三、wagon-ssh使用
    • 1、上传文件/文件夹
    • 2、执行Linux命令或者shell脚本
  • 总结


前言

有时我们在构建项目时,希望能自动生成版本号或者生成不同操作系统标识的版本后缀,这时我们可以通过os-maven-plugin、buildnumber-maven-plugin这两个插件来完成。
如果我们想在构建完成后再进行上传操作,比如将打包后的文件上传到固定的发布目录,或者直接进行自动更新操作,这时我们可以使用wagon-ssh插件来完成这样的功能。


一、os-maven-plugin的使用

严格来说os-maven-plugin算不上一个插件,它只是一个编一阶段的依赖库,他的主要作用是提供本机的操作系统信息,方便我们在编译代码时引用相关的属性。
具体使用如下:

<build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.7.0</version></extension></extensions>
</build>

然后我们就可以在pom.xml中来使用它提供的一些系统属性,目前主要提供了下面这些属性:

PropertyDescriptionvalue
os.detected.name操作系统名称linux/windows/osx等
os.detected.arch操作系统架构x86_32/x86_64/arm_32/aarch_64等
os.detected.bitness操作系统位数32/64
os.detected.version.*操作系统版本相关
os.detected.classifier操作系统名称和架构${os.detected.name}-${os.detected.arch}

下面我们使用maven-antrun-plugin插件来打印相关信息,添加如下配置:

<plugin><artifactId>maven-antrun-plugin</artifactId><version>3.1.0</version><executions><execution><phase>test</phase><configuration><target><echo message="os.detected.name: ${os.detected.name}"/><echo message="os.detected.arch: ${os.detected.arch}"/><echo message="os.detected.bitness: ${os.detected.bitness}"/><echo message="os.detected.version: ${os.detected.version}"/><echo message="os.detected.version.major: ${os.detected.version.major}"/><echo message="os.detected.version.minor: ${os.detected.version.minor}"/><echo message="os.detected.classifier: ${os.detected.classifier}"/></target></configuration><goals><goal>run</goal></goals></execution></executions>
</plugin>

然后运行maven命令:

mvn clean -DskipTests compile

输出结果:

[INFO] os.detected.name: osx
[INFO] os.detected.arch: x86_64
[INFO] os.detected.bitness: 64
[INFO] os.detected.version: 10.16
[INFO] os.detected.version.major: 10
[INFO] os.detected.version.minor: 16
[INFO] os.detected.classifier: osx-x86_64

另外在maven的dependency标签中有一个classifier属性,这个属性其实就是上面提供的os.detected.classifier,表示当前依赖的库是某个特定操作系统下的库。
比如:

<project><dependencies><dependency><groupId>com.example</groupId><artifactId>my-native-library</artifactId><version>1.0.0</version><classifier>${os.detected.classifier}</classifier></dependency></dependencies>
</project>

这样会根据你当前的操作系统的classifier去加载对应的库。

如果我们要发布特定操作系统下的一个依赖库,我们可以配合maven-jar-plugin插件来使用,添加如下配置:

<plugin><artifactId>maven-jar-plugin</artifactId><configuration><classifier>${os.detected.classifier}</classifier></configuration>
</plugin>

运行打包命令:

mvn clean -DskipTests package

打包成功后,生成的jar文件会自动加上os.detected.classifier的值,如下所示:

二、buildnumber-maven-plugin使用

默认情况下,当我们不去修改build.finalName的值时。maven打包会自动带上项目的名称和version属性,如果我们想要对项目进行版本管理,这样每次打包就需要手动去修改版本号。buildnumber-maven-plugin能帮我们实现自动添加版本号的功能,但总的来说如果想要高度定制自己的版本号策略,这个插件还是不太能满足,下面我们来看下buildnumber-maven-plugin提供了哪些版本号策略。

取名叫buildnumber-maven-plugin的插件有很多,而且资料很乱,下面我们使用org.codehaus.mojo。还有其他的groupId,大家可以自行去研究。
使用配置:

<build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>3.1.0</version><executions><execution><phase>validate</phase><goals><goal>create</goal></goals></execution></executions><configuration><doCheck>true</doCheck><doUpdate>true</doUpdate></configuration></plugin></plugins>
</build>

我们通过案例来介绍他的版本号策略。

1、时间戳策略

插件会提供一个buildNumber的全局属性,我们可以直接在pom.xml中使用。
时间戳就是根据当前的时间来生成版本号。

配置如下:

<build><finalName>pkg-sb-${timestamp}</finalName><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>1.4</version><configuration><timestampFormat>yyyyMMddHHmmss</timestampFormat></configuration><executions><execution><goals><goal>create-timestamp</goal></goals></execution></executions><inherited>false</inherited></plugin></plugins>
</build>

这样我们会生成pkg-sb-20240223104052.jar这样的文件,在timestampFormat中,可以根据自身情况来进行格式化。

另外这种方式,使用maven自带的全局时间变量也可以完成。

添加全局时间变量:

<properties><maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
</properties>

然后修改build.finalName:

<build><finalName>pkg-sb-${maven.build.timestamp}</finalName>
</build>

这样就会生成pkg-sb-2024-02-23 02:44:43.jar文件。

2、数字策略

注意:要使用这种模式需要你的项目是在scm模式下才行,就是项目需要在subversion, git, mercurial, perforce(using p4maven)仓库中才行。而且需要在pom.xml配置scm标签。

如下所示在pom.xml中添加:

<scm><connection>scm:git:https://github.com/xxx.git</connection><developerConnection>scm:git:https://github.com/xxx.git</developerConnection><tag>HEAD</tag><url>https://github.com/xxx.git</url>
</scm>

上面的xxx替换成你实际的项目,当然出了github,还可以是任意的支持git仓库的私有库或者其他平台。
然后添加插件配置:

<build><finalName>pkg-sb-${buildNumber}</finalName><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>buildnumber-maven-plugin</artifactId><version>3.1.0</version><executions><execution><id>generate-buildnumber</id><phase>validate</phase><goals><goal>create</goal></goals></execution></executions><configuration><format>1.0.{0,number}</format> <items><item>buildNumber</item> </items><doCheck>false</doCheck><doUpdate>false</doUpdate></configuration></plugin></plugins>
</build>

然后运行打包命令:

mvn clean -DskipTests package
  1. 第一次打包生成文件:pkg-sb-1.0.1.jar
  2. 第二次打包生成文件:pkg-sb-1.0.2.jar
    同时在项目目录下,还生成了一个buildNumber.properties的文件,内容如下:
#maven.buildNumber.plugin properties file
#Fri Feb 23 11:23:27 CST 2024
buildNumber=2

也就是说,每次打包,这个文件都会更新

format标签可以进行任意的字符串格式化操作,比如下面的这段配置:

<configuration><format>At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.</format><items><item implementation="java.lang.Integer">7</item><item>timestamp</item><item>a disturbance in the Force</item></items>
</configuration>

生成的最终文件格式为:
pkg-sb-At 11:29:09 on 2024-2-23, there was a disturbance in the Force on planet 7…jar

三、wagon-ssh使用

打包后,如果我们要把相应的文件上传到服务器,或者直接进行自动更新操作,那么我们可以使用wagon-ssh来完成。
wagon-ssh的功能很强大,能进行File、HTTP、HTTP lightweight、FTP、SSH/SCP、WebDAV、SCM (in progress)操作,下面我们主要介绍SSH/SCP的相关操作。其他使用方式大家可以参照官网
在maven中使用wagon-ssh配置如下:

<project>[...]<build>[...]<extensions><extension><groupId>org.apache.maven.wagon</groupId><artifactId>wagon-ssh</artifactId><version>${wagonApiVersion}</version></extension></extensions><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>wagon-maven-plugin</artifactId><version>2.0.2</version><executions><execution><id>upload-javadoc</id><phase>deploy</phase><goals><goal>upload</goal></goals><configuration><fromDir>local.dir</fromDir><includes>*</includes><excludes>pom.xml</excludes><url>scp://your.remote.host/</url><toDir>remote.dir</toDir></configuration></execution></executions></plugin></plugins></build>[...]
</project>

下面我们通过实际的使用实例来介绍。

1、上传文件/文件夹

<build><finalName>pkg-sb</finalName><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>2.0.2</version><executions><execution><id>upload-javadoc</id><phase>package</phase><goals><goal>upload</goal></goals><configuration><includes>*</includes><excludes>pom.xml</excludes><fromDir>conf</fromDir><url>scp://root:tomcat@192.168.101.170</url><toDir>/root/test</toDir></configuration></execution></executions></plugin></plugins>
</build>

上面的配置我们将项目下的conf文件夹下面的文件上传到了192.168.101.170的/root/test目录下。这里可以通过includes和excludes来进行文件过滤操作。

2、执行Linux命令或者shell脚本

如果我们要进行操作,可以添加如下配置:

 <build><finalName>pkg-sb</finalName><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>2.0.2</version><executions><execution><id>execute-test-commands</id><phase>package</phase><goals><goal>sshexec</goal></goals><configuration><url>scp://root:tomcat@192.168.101.170</url><!-- 显示运行命令的输出结果 --><displayCommandOutputs>true</displayCommandOutputs><commands><command>ls -alh</command><command>/usr/share/tomcat/bin/tomcat stop</command><command>rm -rf /usr/share/tomcat/webapps/ROOT</command><command>unzip -o /usr/share/tomcat/webapps/myapp.zip -d /usr/share/tomcat/webapps/</command><command>/usr/share/tomcat/bin/tomcat start</command></commands></configuration></execution></executions></plugin></plugins>
</build>

上面我们进行了命令操作和脚本操作,可以配置自己的项目情况来实现对项目的自动更新和重启

当然我们可以把两个execution合并,然后依次来执行。

注意:上面我们添加的execution的phase都是在package阶段,所以我们运行mvn package时会自动执行,如果要单独执行wagon-ssh,或者修改phase。可以使用下面命令来完成:

mvn -e  clean  wagon:upload wagon:sshexec

总结

上面三个插件大家可以根据自己的项目情况来配合使用,如有错误的地方欢迎大家留言提醒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RS®FSVA3000 信号与频谱分析仪

R&SFSVA3000 信号与频谱分析仪 非常适用于实验室以及生产过程中的高要求信号分析任务。R&SFSVA3000 信号与频谱分析仪的分析带宽高达 1 GHz&#xff0c;并具有低至 –120 dBc/Hz 的相位噪声和高动态范围&#xff0c;适用于要求严格的 5G NR 测量应用。分析仪测量速度快…

代码随想录算法训练营第二天

● 今日学习的文章链接和视频链接 ● 自己看到题目的第一想法 977.有序数组的平方 方法一&#xff1a; 思路&#xff1a; 先将数据所有数据平方将数组排序 代码&#xff1a; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vect…

vue后台管理添加水印简单方式watermark-package

详情参考:https://www.npmjs.com/package/watermark-package 示例方法 <el-button type"primary" click"AddWatermark">添加水印</el-button><el-button type"primary" click"RemoveWatermark">清除水印</el-but…

Linux调试器——gdb的基础使用

目录 1.背景 2.指令的使用 2.1gdb的使用和退出 2.2显示源代码 2.3运行程序 2.4调试 1.打断点 2.查断点 3.去断点 4.运行 5.关闭断点 6.启用断点 7.逐过程 8.进入函数 9.显示变量的值 1.背景 众所周知&#xff0c;我们的程序发布有两种&#xff0c;分别是debug模式和release模式…

18.贪心算法

排序贪心 区间贪心 删数贪心 统计二进制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一维前缀和优化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…

uni-app 经验分享,从入门到离职(五)——由浅入深 uni-app 数据缓存

文章目录 &#x1f4cb;前言⏬关于专栏 &#x1f3af;什么是数据存储&#x1f9e9;数据存储——存储&#x1f4cc; uni.setStorage(OBJECT)&#x1f4cc; uni.setStorageSync(KEY,DATA) &#x1f9e9;数据存储——获取&#x1f4cc; uni.getStorage(OBJECT)&#x1f4cc; uni.g…

2024年【起重机司机(限桥式起重机)】找解析及起重机司机(限桥式起重机)考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【起重机司机(限桥式起重机)】找解析及起重机司机(限桥式起重机)考试总结&#xff0c;包含起重机司机(限桥式起重机)找解析答案和解析及起重机司机(限桥式起重机)考试总结练习。安全生产模拟考试一点通结合国家…

[AI]部署安装有道QanyThing

前提条件&#xff1a; 1、win10系统更新到最新的版本&#xff0c;系统版本最好为专业版本 winver 查看系统版本&#xff0c;内部版本要大于19045 2、CPU开启虚拟化 3、开启虚拟化功能&#xff0c;1、2、3每步完成后均需要重启电脑&#xff1b; 注&#xff1a;windows 虚拟…

CSS轻松学:简单易懂的CSS基础指南

css基础 更多web开发知识欢迎访问我的专栏>>> 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09;。 书写位置&#xff1a;…

第九届大数据与计算国际会议 (ICBDC 2024) 即将召开!

2024年第九届大数据与计算国际会议&#xff08;ICBDC 2024&#xff09;将于2024年5月24至26日在泰国曼谷举行。本次会议由朱拉隆功大学工程学院工业工程系主办。ICBDC 2024的宗旨是展示大数据和计算主题相关科学家的最新研究和成果&#xff0c;为来自不同地区的专家代表们提供一…

嵌入式学习笔记总结Day23----minshell项目总结

今天进行了linux系统高级编程io阶段学习的结尾&#xff0c;完成了一个minshell的小项目。 一、项目介绍 利用Linux中IO接口实现MiniShell&#xff0c;实现常用的shell指令的实现。 项目想要实现需要思考的地方有&#xff1a; 1.如何打印终端命令 2.如何接受终端命令 3.实现对…

Sora - 探索AI视频模型的无限可能-官方报告解读与思考

一、引言 最近SORA火爆刷屏&#xff0c;我也忍不住找来官方报告分析了一下&#xff0c;本文将深入探讨OpenAI最新发布的Sora模型。Sora模型不仅仅是一个视频生成器&#xff0c;它代表了一种全新的数据驱动物理引擎&#xff0c;能够在虚拟世界中模拟现实世界的复杂现象。本文将重…

[力扣 Hot100]Day33 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 出处 思路 归并排序即可。 代码 class Solution { public:ListNode* merge(ListNode *h1,ListNode *h2) {ListNode *head nullptr;if(h1->val<h2->val){head h1;h1h1-…

2024.2.22 C++QT 作业

思维导图 练习题 1>完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面。如果账…

Vue响应式状态ref()与reactive()

1. ref()声明响应式状态 <template><!--在DOM元素调用变量时,不需要指定输出变量的value,因为Vue会帮你输出.value但是注意,这个帮助只会帮助顶级的ref属性才会被解包--><div>{{ count }}</div><div>{{ object }}</div><div>{{ arr…

git切换仓库地址

已有git仓库&#xff0c;要切换提交的仓库地址&#xff0c;用以下命令 git remote set-url origin 自己的仓库地址 用以下命令&#xff0c;查看当前仓库地址&#xff1a; git remote show origin 切换仓库后&#xff0c;用以下命令初始化提交仓库&#xff1a; git push -u o…

数据库增删改查

DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库用户、控制数…

axure9.0 工具使用思考

原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】快速原型设计工具原型设计软件【AxureRP】…

CentOS使用Docker搭建Halo网站并实现无公网ip远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

创纪录:英伟达市值一日增 2770 亿美元;Xiaomi 14 Ultra 正式发布丨 RTE 开发者日报 Vol.150

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…