Maven屬性與版本管理詳細(xì)步驟分解
屬性
問題引入
前面我們已經(jīng)在父工程中的dependencyManagement標(biāo)簽中對項目中所使用的jar包版本進(jìn)行了統(tǒng)一的管理,但是如果在標(biāo)簽中有如下的內(nèi)容:
你會發(fā)現(xiàn),如果我們現(xiàn)在想更新Spring的版本,你會發(fā)現(xiàn)我們依然需要更新多個jar包的版本,這樣的話還是有可能出現(xiàn)漏改導(dǎo)致程序出問題,而且改起來也是比較麻煩。
問題清楚后,我們需要解決的話,就可以參考咱們java基礎(chǔ)所學(xué)習(xí)的變量,聲明一個變量,在其他地方使用該變量,當(dāng)變量的值發(fā)生變化后,所有使用變量的地方,就會跟著修改,即:
解決步驟
步驟1:父工程中定義屬性
<properties> <spring.version>5.2.10.RELEASE</spring.version> <junit.version>4.12</junit.version> <mybatis-spring.version>1.3.0</mybatis-spring.version> </properties>
步驟2:修改依賴的version
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency>
此時,我們只需要更新父工程中properties標(biāo)簽中所維護(hù)的jar包版本,所有子項目中的版本也就跟著更新。當(dāng)然除了將spring相關(guān)版本進(jìn)行維護(hù),我們可以將其他的jar包版本也進(jìn)行抽取,這樣就可以對項目中所有jar包的版本進(jìn)行統(tǒng)一維護(hù),如:
<!--定義屬性--> <properties> <spring.version>5.2.10.RELEASE</spring.version> <junit.version>4.12</junit.version> <mybatis-spring.version>1.3.0</mybatis-spring.version> </properties>
配置文件加載屬性
Maven中的屬性我們已經(jīng)介紹過了,現(xiàn)在也已經(jīng)能夠通過Maven來集中管理Maven中依賴jar包的版本。但是又有新的需求,就是想讓Maven對于屬性的管理范圍能更大些,比如我們之前項目中的jdbc.properties
,這個配置文件中的屬性,能不能也來讓Maven進(jìn)行管理呢?
答案是肯定的,具體的實現(xiàn)步驟為:
步驟1:父工程定義屬性
<properties> <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url> </properties>
步驟2:jdbc.properties文件中引用屬性
在jdbc.properties,將jdbc.url的值直接獲取Maven配置的屬性
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=***********
步驟3:設(shè)置maven過濾文件范圍
Maven在默認(rèn)情況下是從當(dāng)前項目的src\main\resources
下讀取文件進(jìn)行打包?,F(xiàn)在我們需要打包的資源文件是在maven_02_ssm下,需要我們通過配置來指定下具體的資源目錄。
<build> <resources> <!--設(shè)置資源目錄--> <resource> <directory>../maven_02_ssm/src/main/resources</directory> <!--設(shè)置能夠解析${},默認(rèn)是false --> <filtering>true</filtering> </resource> </resources> </build>
說明:directory路徑前要添加../
的原因是maven_02_ssm相對于父工程的pom.xml路徑是在其上一層的目錄中,所以需要添加。
修改完后,注意maven_02_ssm項目的resources目錄就多了些東西,如下:
步驟4:測試是否生效
測試的時候,只需要將maven_02_ssm項目進(jìn)行打包,然后觀察打包結(jié)果中最終生成的內(nèi)容是否為Maven中配置的內(nèi)容。
上面的屬性管理就已經(jīng)完成,但是有一個問題沒有解決,因為不只是maven_02_ssm項目需要有屬性被父工程管理,如果有多個項目需要配置,該如何實現(xiàn)呢?
方式一:
<build> <resources> <!--設(shè)置資源目錄,并設(shè)置能夠解析${}--> <resource> <directory>../maven_02_ssm/src/main/resources</directory> <filtering>true</filtering> </resource> <resource> <directory>../maven_03_pojo/src/main/resources</directory> <filtering>true</filtering> </resource> ... </resources> </build>
可以配,但是如果項目夠多的話,這個配置也是比較繁瑣
方式二:
<build> <resources> <!-- ${project.basedir}: 當(dāng)前項目所在目錄,子項目繼承了父項目, 相當(dāng)于所有的子項目都添加了資源目錄的過濾 --> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
說明:打包的過程中如果報如下錯誤:
原因就是Maven發(fā)現(xiàn)你的項目為web項目,就會去找web項目的入口web.xml[配置文件配置的方式],發(fā)現(xiàn)沒有找到,就會報錯。
解決方案1:在maven_02_ssm項目的src\main\webapp\WEB-INF\
添加一個web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> </web-app>
解決方案2: 配置maven打包war時,忽略web.xml檢查
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
上面我們所使用的都是Maven的自定義屬性,除了${project.basedir},它屬于Maven的內(nèi)置系統(tǒng)屬性。
在Maven中的屬性分為:
- 自定義屬性(常用)
- 內(nèi)置屬性
- Setting屬性
- Java系統(tǒng)屬性
- 環(huán)境變量屬性
具體如何查看這些屬性:
在cmd命令行中輸入mvn help:system
具體使用,就是使用 ${key}
來獲取,key為等號左邊的,值為等號右邊的,比如獲取紅線的值,對應(yīng)的寫法為 ${java.runtime.name}
。
版本管理
關(guān)于這個版本管理解決的問題是,在Maven創(chuàng)建項目和引用別人項目的時候,我們都看到過如下內(nèi)容:
這里面有兩個單詞,SNAPSHOT和RELEASE,它們所代表的含義是什么呢?
我們打開Maven倉庫地址https://mvnrepository.com/
在我們jar包的版本定義中,有兩個工程版本用的比較多:
SNAPSHOT(快照版本)
- 項目開發(fā)過程中臨時輸出的版本,稱為快照版本快照版本
- 會隨著開發(fā)的進(jìn)展不斷更新
RELEASE(發(fā)布版本)
- 項目開發(fā)到一定階段里程碑后,向團(tuán)隊外部發(fā)布較為穩(wěn)定的版本,這種版本所對應(yīng)的構(gòu)件文件是穩(wěn)定的
- 即便進(jìn)行功能的后續(xù)開發(fā),也不會改變當(dāng)前發(fā)布版本內(nèi)容,這種版本稱為發(fā)布版本
除了上面的工程版本,我們還經(jīng)常能看到一些發(fā)布版本:
- alpha版:內(nèi)測版,bug多不穩(wěn)定內(nèi)部版本不斷添加新功能
- beta版:公測版,不穩(wěn)定(比alpha穩(wěn)定些),bug相對較多不斷添加新功能
- 純數(shù)字版
對于這些版本,大家只需要簡單認(rèn)識下即可。
到此這篇關(guān)于Maven屬性與版本管理詳細(xì)步驟分解的文章就介紹到這了,更多相關(guān)Maven屬性與版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot項目全局異常統(tǒng)一處理案例代碼
最近在做項目時需要對異常進(jìn)行全局統(tǒng)一處理,主要是一些分類入庫以及記錄日志等,因為項目是基于Springboot的,所以去網(wǎng)絡(luò)上找了一些博客文檔,然后再結(jié)合項目本身的一些特殊需求做了些許改造,現(xiàn)在記錄下來便于以后查看2023-01-01Java用itextpdf導(dǎo)出PDF方法(通俗易懂)
因為項目需要導(dǎo)出PDF文件,所以去找了一下能夠生成PDF的java工具,這篇文章主要給大家介紹了關(guān)于Java用itextpdf導(dǎo)出PDF的相關(guān)資料,文中介紹的方法通俗易懂,需要的朋友可以參考下2023-07-07