目录
一、快照(SNAPSHOT )
1、定义
快照(SNAPSHOT)是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven每次构建都会在远程仓库中检查新的快照。
2、使用场景
2.1、场景描述:
开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布。对于引用了公共库的依赖,如果该依赖的版本号不变,即使Maven服务器上的组件比本地的新,maven也不会主动下载的,因为maven的依赖管理是基于版本管理的。这样就明显不符合要求和实际情况了,但是,如果是基于快照版本,那么问题就自热而然的解决了。
2.2、Maven的仓库分为snapshot快照仓库和release发布仓库。
snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。
2.3、快照版本机制
如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,会覆盖老的快照版本,而在使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
2.4、总结:
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改pom文件提示版本号来下载新的版本,直接mvn执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
3、版本解读
3.1、Maven版本
- maven的约定中,依赖的版本分为两类——SNAPSHOT和RELEASE。SNAPSHOT依赖泛指以-SNAPSHOT为结尾的版本号
- 所有非-SNAPSHOT结尾的版本号则都被认定为RELEASE版本,即正式版。虽然会有beta、rc之类说法,但是这些只是软件工程角度的测试版
3.2、SNAPSHOT的含义
同一个SNAPSHOT版本的依赖可以多次发布(deploy)到仓库中,也就是说同一个SNAPSHOT版本的依赖可以在仓库中存在多份,每一份都是代码在某一个特定时间的快照
SNAPSHOT不是一个特定的版本,而是一系列的版本的集合,其中HEAD总是指向最新的快照,对外界可见的一般也是最新版,这种给人的假象是新的覆盖了老的,从而使得使用SNAPSHOT依赖的客户端总是通过重新构建(有时候需要-U强制更新)就可以拿到最新的代码。
例如:A-->B-1.3.8-SNAPSHOT(理解为A依赖了B的1.3.8-SNAPSHOT版本),那么B-1.3.8-SNAPSHOT更新之后重新deploy到仓库之后,A只需要重新构建就可以拿到最新的代码,并不需要改变依赖B的版本。由此可见,这样达到了变更传达的透明性,这对于开发过程中的团队协作的帮助不言而喻。
二、三级版本号说明
参考:https://zhanghaiyang.blog.youkuaiyun.com/article/details/53308836
项目采用通用的三级版本号,版本号格式是[主版本号].[副版本号].[修复版本号]-[稳定状态],如:1.0.0-SNAPSHOT。
- [主版本号] 是从1开始的整数,表示重大的项目结构和概念调整,一般不会轻易修改该版本号,不同的主版本号不承诺能够兼容。
- [副版本号] 是从0开始的整数,表示项目的功能特性增加或者BUG修复,同一个[主版本号]下的不同副版本是能够向下兼容的。
- [修复版本号] 只是从0开始的整数,一般只是小的BUG修复,细微功能调整。
- [稳定状态] 的可选值有:SNAPSHOT、RC[序号]、RELEASE。SNAPSHOT表示开发快照版本,该版本未经过严格测试,可能呢不稳定,不宜用于生产环境;RC[序号]表示可选非正式发布版本,比较稳定,但是非正式版本,可能存在问题,可能有多个RC版本,RC序号会有多个;RELEASE表示正式发布版本,经过了严格测试,可以用于生产环境,请尽量用该版本作为生产使用。
三、mvn site
mvn site生成站点和项目文档
1、pom.xml配置
经过多方测试和查询,以下配置是可以生成maven 站点文档的
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.starfall.maven</groupId>
<artifactId>MavenJava</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>MavenJava</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-site-renderer</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.doxia</groupId>
<artifactId>doxia-site-renderer</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.9</version>
</plugin>
</plugins>
</reporting>
</project>
同时,还配置一个系统环境变量:参考:https://blog.youkuaiyun.com/crazymakercircle/article/details/80259251
变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8
2、生成结果
生成后的target:
打开index.html:
四、生成JavaDoc的API文档
待定。。。。
参考:https://zhanghaiyang.blog.youkuaiyun.com/article/details/79351303
参考文献:
http://www.runoob.com/maven/maven-snapshots.html
https://www.cnblogs.com/wuchanming/p/5484091.html
https://blog.youkuaiyun.com/kp783491236/article/details/82929063
https://blog.youkuaiyun.com/crazymakercircle/article/details/80259251