Давно собирался включить нумерование версий в своих проектах: при тиражировании продукта крайне полезно определить номер версии.
С использованием SVN все оказалось проще, чем я думал: при commit'e исходников в SVN есть возможность подстановки макросов.
Только первоначально следует определить свойство svn:keywords как
HeadURL
Revision
Author
Date
ID
Теперь, вставить в исходный код:
/**
* Repository path: $HeadURL$
* Last committed: $Revision$
* Last changed by: $Author$
* Last changed date: $Date$
* ID: $Id$
*/
package com.app;
public final class AppVersion
{
// SVN should fill this out with the latest tag when it's checked out.
private static final String APP_SVN_REVISION_RAW = "$Revision$";
private static final String APP_SVNREVISION = APP_SVN_REVISION_RAW.replaceAll("\\$Revision:\\s*", "").replaceAll("\\s*\\$", "");
public static String svnRevision()
{
return APP_SVNREVISION;
}
}
Делаем commit в svn и svn:keywords заменяются на
/**
* Repository path: $HeadURL: http://10.0.26.100:8080/svn/reg/Java Projects/Workplace/src/com/app/AppVersion.java $
* Last committed: $Revision: 617 $
* Last changed by: $Author: NBochkarev $
* Last changed date: $Date: 2011-09-15 11:05:30 +0600 (Чт, 15 сен 2011) $
* ID: $Id: AppVersion.java 617 2011-09-15 05:05:30Z NBochkarev $
*/
Проверяем:
System.out.println("Version: "+AppVersion.svnRevision());
Version 612
В написании кода сильно помогла статья
Build and Version Numbering for Java Projects (ant, cvs, hudson)