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.pswp.cn/news/697922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java實戰:Spring Boot實現郵件發送服務

本文將詳細介紹如何在Spring Boot應用程序中實現郵件發送服務。我們將探討Spring Boot集成郵件發送服務的基本概念&#xff0c;以及如何使用Spring Boot和第三方郵件服務提供商來實現郵件發送。此外&#xff0c;我們將通過具體的示例來展示如何在Spring Boot中配置和使用郵件發…

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;…

基于HAL庫的STM32-ADC學習(附帶代碼)

1.前言 STM32ADC是一種模擬/數字轉換器&#xff0c;可以將模擬信號轉換為數字信號。STM32ADC有多個通道&#xff0c;可以選擇不同的輸入源、轉換模式、觸發方式和采樣時間。STM32ADC的轉換結果可以通過中斷、DMA或者寄存器讀取。 在本文中&#xff0c;我將介紹如何使用STM32C…

第九屆大數據與計算國際會議 (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;跳轉到其他界面。如果賬…

Stream、Collections、Collectors用法

當涉及Java編程中的集合處理時&#xff0c;Stream、Collections和Collectors是三個常用的工具。以下是它們各自的主要功能和使用的一些方法的概要&#xff1a; Stream&#xff1a; 概要&#xff1a;Stream 是 Java 8 引入的一個強大工具&#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;用來創建數據庫用戶、控制數…