版本號閒談
不管是對於後端還是前段版本兼容始終是個無法避免的難題,而其中的版本號命令也應該符合一定的規則,否則比較版本時就比較麻煩.
版本號的格式: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;
}
}