maven的jar库版本说明-----pom<version>

maven的pom文件中version使用,版本定义、版本约定、版本范围、版本排除、版本锁定、版本常量等

1.参考资料

  • maven的版本规范(七)
  • maven 依赖规则&版本锁定
  • Maven 依赖范围
  • Maven详解之------maven版本管理
  • maven依赖指定版本范围或者最新版本
  • dependencyManagement使用简介
  • maven指定版本号范围写法
  • Maven profiles 多环境配置,测试环境与开发环境分开打包

2.版本定义

pom中外部包引用实例,使用标签管理版本。

<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-dependenciesartifactId>
  <version>2.3.1.RELEASEversion>
dependency>
<dependency>
    <groupId>org.jboss.marshallinggroupId>
    <artifactId>jboss-marshalling-riverartifactId>
    <version>2.0.9.Finalversion>
    <scope>providedscope>
    <optional>trueoptional>
dependency>
<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-testartifactId>
    <version>[3.1,)version>
    <scope>testscope>
dependency>
<dependency>
  <groupId>io.nettygroupId>
  <artifactId>netty-tcnativeartifactId>
  <version>2.0.30.Finalversion>
  <classifier>osx-x86_64classifier>
  <scope>compilescope>
  <optional>trueoptional>
dependency>
...

约定

<version>主版本.次版本.增量版本-里程碑版本version>

说明:

  1. 主版本号:项目的重大架构变更
  2. 次版本号:较大范围的功能变化及bug修复
  3. 增量版本号:次要版本的增量更新,一般为bug修复
  4. 里程碑:某一版本的里程碑,一般为英文单词(内容参考百度百科)。无顺序说明:
    1. SNAPSHOT:快照版
    2. ALPHA:内部测试版,经历了α测试(开发环境下进行的测试)。软件测试的第一个版本
    3. BETA:外部测试版,经历了β测试(功能测试和系统测试)。软件测试的第二个版本
    4. RELEASE:发行版/稳定版
    5. RC:候选版,软件正式发布的候选版本
    6. SR:修正版/更新版
    7. FINAL:发布版/正式版,软件测试的第三个版本
    8. DEMO:演示版
    9. ENHANCED:增强版、加强版
    10. FREE:自由版
    11. FULL VERSION:完全版
    12. SHAREWARE / CARDWARE:共享版
    13. UPGRADE:升级版
    14. RETAIL:零售版
    15. PLUS:增强版
    16. PREVIEW:预览版
    17. STANDARD:标准版
    18. MINI:迷你版、精简版
    19. PREMIUM:超值版
    20. PROFESSIONAL:专业版
    21. EXPRESS:简易版
    22. DELUXE:豪华版
    23. REGGED:注册版
    24. TRIAL:试用版

版本范围

标签管理,使用方式:

  1. 1.18.8:常用写法,指定版本
  2. (,1.0]:最低版本 不限制,最高版本 限制。version <= 1.0
  3. [1.0]:最低版本 限制,最高版本 限制。version == 1.0
  4. [1.0,1.9]:最低版本 限制,最高版本 限制。1.0 <= version <= 1.9
  5. [1.0,2.0):最低版本 限制,最高版本 限制。1.0 <= version < 2.0
  6. [1.0,):最低版本 限制,最高版本 不限制。1.0 <= version
  7. (,1.0],[2.0,):最低版本 限制,最高版本 限制。version <= 1.0 or version >= 2.0 排除1.0到2.0版本
  8. (,1.1),(1.1,):最低版本 限制,最高版本 限制。version < 1.1 or 1.1 < version 排除1.1版本

存在快照版本和非快照版本呢?默认情况下,同版本的快照版本会小于非快照版本。如:

  • [1.0-SNAPSHOT,1.0]:如果1.0不存在则使用1.0-SNAPSHOT,1.0存在则使用1.0版本
  • [1.0,1.0-SNAPSHOT]:错误,会提示:Reason: Range defies version ordering

还有另外一种办法是使用maven的profile将各个环境的版本号区分开

多环境配置profile

将开发环境、测试环境、生产环境的配置文件分开存放,如下图:
maven的jar库版本说明-----pom<version>_第1张图片
在Maven中配置不同的环境打包配置文件的路径,配置如下:

<profiles>
	<profile>
		
		<id>devid>
		<properties>
			<env>devenv>
		properties>
		<activation>
			
			<activeByDefault>trueactiveByDefault>  
		activation> 
		<build>
			<resources>
				<resource>
					<directory>src/main/resources-env/devdirectory>
				resource>
				<resource>
					<directory>src/main/resourcesdirectory>
				resource>
			resources>
		build>
	profile>
	<profile>
		
		<id>qaid>
		<properties>
			<env>qaenv>
		properties>
		<build>
			<resources>
				<resource>
					<directory>src/main/resources-env/qadirectory>
				resource>
				<resource>
					<directory>src/main/resourcesdirectory>
				resource>
			resources>
		build>
	profile>
	<profile>
		
		<id>onlineid>
		<properties>
			<env>onlineenv>
		properties>
		<build>
			<resources>
				<resource>
					<directory>src/main/resources-env/onlinedirectory>
				resource>
				<resource>
					<directory>src/main/resourcesdirectory>
				resource>
			resources>
		build>
	profile>
profiles>

3.依赖范围

使用标签管理,可选配置:compiletestprovidedruntimesystemimport

范围classpath 编译 测试 运行 例子
compile Y Y Y spring-core
test - Y - junit
provided Y Y - servlet-api
runtime - Y Y jdbc驱动
system Y Y - 本地的,maven之外的库

导入依赖的是可能存在传递依赖
maven调节原则:

  1. 谁先定义的用谁的传递依赖
  2. 直接依赖优先级大于传递依赖

编译依赖范围compile

该范围就是默认依赖范围,此依赖范围对于 编译、测试、运行 三种classpath都有效

举个简单的例子,假如项目中有spring-core的依赖,那么spring-core不管是在 编译测试 ,还是 运行 都会被用到,因此spring-core必须是编译范围

构件默认的是编译范围,所以依赖范围是编译范围的无须显示指定

<dependency>
	<groupId>org.springframeworkgroupId>
	<artifactId>spring-coreartifactId>
	<version>2.5version>
	<scope>compilescope>
	
                    

你可能感兴趣的:(工具,springboot,maven,maven,java,jar,后端,开发)