Maven中<distributionManagement>的使用及說(shuō)明
SNAPSHOT倉(cāng)庫(kù)與RELEASE倉(cāng)庫(kù)的區(qū)別
我們?cè)陂_(kāi)發(fā)軟件階段時(shí)會(huì)在POM文件中導(dǎo)入很多依賴(lài)公共庫(kù),這些公共庫(kù)可能隨時(shí)需要修改并發(fā)布,可能一天就要發(fā)布一次甚至一天要發(fā)布N次。
對(duì)與采用maven來(lái)管理依賴(lài)公共庫(kù)時(shí),由于maven的依賴(lài)管理是基于版本管理(version),如果我們本地已經(jīng)存在了公共庫(kù)的依賴(lài),那么即使內(nèi)部服務(wù)器上的組件發(fā)生變化,在本地與服務(wù)器上依賴(lài)版本相同的情況下,maven不會(huì)再去內(nèi)部服務(wù)器上拉取最新的依賴(lài),也就是說(shuō)無(wú)法實(shí)時(shí)將服務(wù)器上的更新同步到本地。
如果要解決這個(gè)問(wèn)題,就需要升級(jí)組件的版本號(hào)(version),可這樣就明顯不符合要求和實(shí)際情況了,而SNAPSHOT快照版本,就可以解決這個(gè)問(wèn)題,對(duì)于每次內(nèi)部服務(wù)器上更新了組件,本地都會(huì)去重新拉取一遍。
在maven中的倉(cāng)庫(kù)分為兩種:
- snapshot快照倉(cāng)庫(kù)
- release發(fā)布倉(cāng)庫(kù)
snapshot快照倉(cāng)庫(kù)用于保存開(kāi)發(fā)過(guò)程中的不穩(wěn)定版本,release正式倉(cāng)庫(kù)則是用來(lái)保存穩(wěn)定的發(fā)行版本(比如Spring、SpringBoot)。
定義一個(gè)組件/模塊為快照版本,只需要在pom文件中在該模塊的版本號(hào)后加上-SNAPSHOT即可,如下:
<modelVersion>4.0.0</modelVersion> <groupId>com.seeker</groupId> <artifactId>data-export-center</artifactId> <packaging>pom</packaging> <version>1.0.0-SNAPSHOT</version>
maven會(huì)根據(jù)模塊的版本號(hào)(version)中是否帶有-SNAPSHOT來(lái)判斷是快照版本還是正式版本。
如果是快照版本,那么在mvn deploy時(shí)會(huì)自動(dòng)發(fā)布到快照版本庫(kù)中,而使用快照版本的模塊,在不更改版本號(hào)的情況下,直接編譯打包時(shí),maven會(huì)自動(dòng)從鏡像服務(wù)器上下載最新的快照版本。
那么如果是正式發(fā)布版本(release),那么在mvn deploy時(shí)會(huì)自動(dòng)發(fā)布到正式版本庫(kù)中,而使用正式版本的模塊,在不更改版本號(hào)的情況下,編譯打包時(shí)如果本地已經(jīng)存在該版本的模塊則不會(huì)主動(dòng)去鏡像服務(wù)器上下載。
所以,我們?cè)陂_(kāi)發(fā)階段,可以將公用庫(kù)的版本設(shè)置為快照版本,而被依賴(lài)組件則引用快照版本進(jìn)行開(kāi)發(fā),在公用庫(kù)的快照版本更新后,我們也不需要修改pom文件提示版本號(hào)來(lái)下載新的版本,直接mvn執(zhí)行相關(guān)編譯、打包命令即可重新下載最新的快照庫(kù)了,從而也方便了我們進(jìn)行開(kāi)發(fā)。
distributionManagement定義SNAPSHOT倉(cāng)庫(kù)和RELEASE倉(cāng)庫(kù)
通常一個(gè)POM文件的內(nèi)容格式如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.seeker</groupId> <artifactId>common-server</artifactId> <version>2.0.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.seeker</groupId> <artifactId>data-export-center</artifactId> <packaging>pom</packaging> <version>${project.release.version}</version> /** 子模塊 */ <modules> XXXXXXX </modules> /** 自定義屬性 */ <properties> <spring.version>5.1.9.RELEASE</spring.version> <project.release.version>1.0.0SNAPSHOT</project.release.version> </properties> /** 統(tǒng)一依賴(lài)版本,子模塊可以不用寫(xiě)版本號(hào) */ <dependencyManagement> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependencyManagement> <profiles> <profile> <id>release</id> <properties> <project.release.version>2.0.0RELEASE</project.release.version> </properties> </profile> </profiles> /** <!--定義snapshots倉(cāng)庫(kù)和releases倉(cāng)庫(kù)的地址--> */ <distributionManagement> <repository> <id>huawei</id> <url>https://huaweiCloud.com.cn/artifactory/seeker/</url> </repository> <snapshotRepository> <id>seekerWorkds</id> <url>https://seeker.top.com.cn/artifactory/seeker/</url> </snapshotRepository> </distributionManagement>
首先我們看到pom文件中version的定義是采用占位符的形式,這樣的好處是可以根據(jù)不同的profile來(lái)替換版本信息,比如maven默認(rèn)是使用1.0.0SNAPSHOT作為該模塊的版本,如果在發(fā)布時(shí)使用mvn deploy -P release 的命令,那么會(huì)自動(dòng)使用2.0.0RELEASE作為發(fā)布版本,那么根據(jù)maven處理snapshot和release的規(guī)則,由于版本號(hào)后不帶-SNAPSHOT故當(dāng)成是正式發(fā)布版本。
會(huì)被發(fā)布到release倉(cāng)庫(kù),在distributionManagement段中配置的是snapshot快照庫(kù)和release發(fā)布庫(kù)的地址。
對(duì)于版本庫(kù)主要是id和url的配置,配置完成后就可以通過(guò)mvn deploy進(jìn)行發(fā)布了。
Maven常用命令及其作用
maven clean
:對(duì)項(xiàng)目進(jìn)行清理,刪除target目錄下編譯的內(nèi)容(將以前編譯得到的舊文件class字節(jié)碼文件刪除)。maven compile
:編譯項(xiàng)目源代碼,將JAVA源程序編譯成class文件。maven test
:對(duì)項(xiàng)目進(jìn)行運(yùn)行測(cè)試。maven packet
:打包文件并存放到項(xiàng)目的target目錄下,打包好的文件通常都是編譯后的class文件。maven install
:在本地倉(cāng)庫(kù)生成倉(cāng)庫(kù)的安裝包,可供其他項(xiàng)目引用,同時(shí)打包后的文件放到項(xiàng)目的target目錄下。maven deploy
:可以將maven所打的jar包上傳到遠(yuǎn)程的repository,便于其他開(kāi)發(fā)者和工程共享。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java自定義動(dòng)態(tài)鏈接數(shù)據(jù)庫(kù)示例
這篇文章主要介紹了java自定義動(dòng)態(tài)鏈接數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下2014-02-02SpringBoot?整合?ElasticSearch操作各種高級(jí)查詢(xún)搜索
這篇文章主要介紹了SpringBoot?整合?ES?進(jìn)行各種高級(jí)查詢(xún)搜索的實(shí)踐記錄,本文主要圍繞?SpringBoot?整合?ElasticSearch?進(jìn)行各種高級(jí)查詢(xún)的介紹,需要的朋友可以參考下2022-06-06servlet之session簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了servlet之session簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07SpringBoot使用validation做參數(shù)校驗(yàn)說(shuō)明
這篇文章主要介紹了SpringBoot使用validation做參數(shù)校驗(yàn)說(shuō)明,首先通過(guò)添加hibernate-validator展開(kāi)全文內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考與喜愛(ài)2022-04-04IDEA里找不到Maven的有效解決辦法(小白超詳細(xì))
這篇文章主要給大家介紹了關(guān)于IDEA里找不到Maven的有效解決辦法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07