четверг, 15 сентября 2011 г.

Build and Version Numbering для Java Projects с использованием SVN

Давно собирался включить нумерование версий в своих проектах: при тиражировании продукта крайне полезно определить номер версии.

С использованием 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)