《maven實戰》讀書筆記7——maven項目版本管理和靈活構建
說明
《maven實戰》一書內容很多,整個maven要學的東西也很多,不過,結合個人實際情況,我打算把這一篇作為這次對maven學習的一個階段性收尾,待其他更急需補充的知識有一定眉目了,再回過頭來繼續深入。
maven版本管理
對於maven版本管理,最重要的是需要區分出快照版本SNAPSHOT和發布版本release,據目前的了解,快照版本格式是固定的,而發布版本有幾種,例如帶release單詞的和不帶release單詞的。
快照版本由於每次發布都帶時間戳,所以適用於開發階段團隊協作,但同時也是不穩定的。
發布版本就需要是比較穩定的版本,定了就不能變,如果要變就要發布新的發布版本。
不過,要更好的了解maven版本管理,必須先比較熟悉版本控製,結合實際情況,就是需要先比較熟悉svn版本控製。
由於目前我雖然天天在用svn,卻還沒有係統的學一下,所以對svn也還不是太熟,再加上目前實際工作對maven版本管理似乎也沒有什麼需求,因此maven版本管理這一塊就先隻做了解。
靈活構建
根據我的理解,maven靈活構建指的是經過一定的配置後,可以使maven在不同的場景很容易的改變一些構建細節,例如某些屬性實際值的使用。
maven提供了屬性properties、profiles、資源過濾三個特性來實現。
屬性properties
這個說白了就相當於配置的一個變量,裏邊的標簽名就是變量名,隻不過有一些標簽是maven默認的,或者說約定了的,同時也能自定義並使用,例如我在某個項目的pom.xml中這樣配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring.version>4.0.9</spring.version> <auth.name>tzx</auth.name> </properties>
在上邊的例子中,前三個是maven默認的一些屬性名,而spring.version、auth.name是我自己加的,有了這些配置,在這個pom.xml文件中就能用${auth.name}
、${spring.version}
這樣的方式獲取到裏邊配置的值,這樣大大增加可維護性以及減少重複配置。
就比如這裏的spring.version,如果這個項目導入了很多個spring的jar包,那麼每個依賴配置都要配置version,如果有了spring.version,那麼在依賴配置的version那裏就可以使用${spring.version}
,以後如果要升級spring版本,就可以隻改動properties中的spring.version的值就可以了。
需要注意的是,我的這個配置是在項目的pom.xml中,但是實際上不隻是能配置在這裏,還能配置在maven的settings.xml中,例如我之前學習代碼管理工具sonar的時候就在setting.xml中配置過mysql數據庫相關的屬性:
<properties> <sonar.jdbc.url> jdbc:mysql://localhost:3306/sonar </sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>sonar</sonar.jdbc.password> <sonar.host.url>https://localhost:9000</sonar.host.url> </properties>
除開上邊兩個之外,maven還能用maven內置屬性、環境變量、係統變量等等,可以用mvn help:system
命令來查看有哪些環境變量和係統變量,至於具體的內置屬性有哪些,可以需要時網上查詢一下。
maven的profiles
在說這個之前,先來看一個在前幾篇記錄中,講maven倉庫時有在settings.xml中出現過的一個配置:
<profiles> <profile> <id>nexus</id> <repositories> <repository> <id>repo1</id> <url>https://192.168.0.224:8081/nexus/content/groups/public</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </releases> </repository> <repository> <id>repo2</id> <url>https://192.168.0.224:8081/nexus/content/groups/public-snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo3</id> <url>https://192.168.0.65:8082/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> </pluginRepository> <pluginRepository> <id>repo4</id> <url>https://192.168.0.65:8082/nexus/content/groups/public-snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles>
很顯然,這就是一個這裏要說的profiles的配置,這種配置的基本形式是,在一個profiles
中可以配置多個profile
,profile
裏就是具體的配置信息,據我理解,幾乎所有能在profile之外配置的信息都可以放到這裏邊配置。
在這個配置中,最重要的是id
屬性,這是每個profile
的唯一標示。
之後可以使用很多種方法來激活這個配置,例如可以在settings.xml文件的profiles
標簽之外增加這樣的配置:
<activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles>
然後,上邊所配置的profile就被激活,可以被使用了。
除了上邊這種激活方式,還可以通過‘命令行激活’、‘環境變量激活’、‘文件是否存在激活’等各種激活方式,不過目前我還完全沒有用過這些方式,就暫時認為不常用,稍作了解就好。
那麼除開上述的所有激活方式外,還有一種就是在profile內部配置激活:
<activation> <activeByDefault>true</activeByDefault> </activation>
這種配置的意思,從字麵意思其實就可以理解,那就是默認激活。不過需要注意的是,假如有用上述任何一種方式激活過某個profile,那麼所有這種默認激活的方式都會失效。
web資源過濾
這個目前感覺也似乎不怎麼常用,因此暫時隻需要知道有這麼回事就好。
最後更新:2017-11-15 12:04:02
上一篇:
他們是阿裏新零售的“前鋒部隊”,離未來最近的一群人
下一篇:
未來物聯網技術發展趨勢分析
iOS開發那些事--創建基於nib的iOS 6的HelloWorld工程
第三章 AOP 基於@Aspect的AOP
從IBM大數據和分析開年幾板斧 看IBM認知商業轉型的姿勢
在 Linux 下將 PNG 和 JPG 批量互轉的四種方法
Directory traversal in Spring framework漏洞
Jquery實現回車鍵Enter切換焦點
“快的那個,會被慢的拖死”,記不斷奔跑、看著阿裏雲產品管控慢慢長大的那個人——尹書威
人類河流文明 - 數據的流動與生態的重要性
10分鍾精通Nginx訪問日誌分析統計
“全球爆料姐”們年賺20億,淘寶說這樣的姐還要再來1000個