版本号闲谈
不管是对于后端还是前段版本兼容始终是个无法避免的难题,而其中的版本号命令也应该符合一定的规则,否则比较版本时就比较麻烦.
版本号的格式:V<主版本号>.<副版本号>.<发布号>
版本号的初始值:V1.0.0
版本号管理规则:
1、产品的主体构件进行重大修改,主版本号加1
2、产品升级增加特性副版本号加1
3、主版本号加1时,副版本号和发布号置为0
4、副版本号加1时,发布号置为0
Java代码实现版本号比较
针对以上命名的规则,我写了一个版本号比较工具.
/**
* 版本号比较
*
* @author xuyi
* @Time 2016年12月3日 下午3:13:14
* @类名 VersionCompare
* @功能描述:
* @春风十里不如你
* @备注:
*/
public class VersionCompare
{
/**
* 这个方法应该算是比较完善的.
*
* @param firstVersion
* @param secondVersion
* @return
*/
public static VersionEnum compare(String firstVersion, String secondVersion)
{
if (firstVersion.equals(secondVersion))
return VersionEnum.EQUAL;
if (moreLaterVersion(firstVersion, secondVersion))
return VersionEnum.HIGHER;
return VersionEnum.LOWER;
}
/**
* 判断两个版本号是否为同一个版本号
*
* @param firstVersion
* @param secondVersion
* @return
*/
public static boolean isEqualsVersion(String firstVersion, String secondVersion)
{
return firstVersion.equals(secondVersion);
}
/**
* 判断第一个版本号是否比后一个版本号更高
*
* @param firstVersion
* @param secondVersion
* @return
*/
public static boolean moreLaterVersion(String firstVersion, String secondVersion)
{
//使用split方法时,注意一点,以"."分隔时要转义,因为使用的是正则处理的.
String[] firstVersions = firstVersion.replace("V", "").split("\\.");
String[] secondVersions = secondVersion.replace("V", "").split("\\.");
int length = firstVersions.length;
for (int i = 0; i < length; i++)
{
boolean later = Integer.compare(Integer.valueOf(firstVersions[i]), Integer.valueOf(secondVersions[i])) > 0;
if (later)
{
return true;
}
}
return false;
}
}
/**
* 版本比较的枚举类型
*
* @author xuyi
* @Time 2016年12月3日 下午3:22:15
* @类名 VersionEnum
* @功能描述:
* @春风十里不如你
* @备注:
*/
@Getter
public enum VersionEnum
{
LOWER("lower", -1), EQUAL("equal", 0), HIGHER("higher", 1);
private int code;
private String desc;
VersionEnum(String desc, int code)
{
this.desc = desc;
this.code = code;
}
}