読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

Subversionのリビジョンを画面に表示したいと言われたら…

Subversion Maven SVN Revision Number Plugin

今までの開発はC#&WindowsFormメインで、ソース管理ツールはVSSしか使ったことがありませんでした。
部内の一部チームではSubversionを利用しているようで、JavaEEプロト開発はそういった面を考慮してSubversionを使うことにしています。個人的にはGitも使ってみたかったのですが。

VSSは完全にソースコードを排他制御するので、誰かが編集中(チェックアウト中)だと自分は編集できません。
これで育ったもので、チェックアウトされたコードを自分がいじりたくなるケースがあると、それを触っている人に「今何書いてます?」みたいな会話をして調整してきました。
これはこれで、開発者同士、健全なコミュニケーションが取れるので好きでした。

で、Subversion。こちらもVSSみたいなモードにできるらしい(人づて情報で未調査…)ですが、デフォルトは特に排他はありません。同じソースを編集していてもOKで、マージなどができる形です。
プロト開発はVSS育ちの2人でやっているので、何とも慣れなれず、今は「これ触るよ?」「あいよ」みたいな声かけをしています(苦笑)これはあまりにダサいので、はやいところマージ感覚に慣れたい所です;

……

さて、今日の本題。

そんなSubversionを使っている中、上の人から「プロトの画面に、ソースのバージョンとか出してほしい」とのお話が出ました。こんなことVSS時代でもやってなくて色々めんどくさそう…はたしてMavenSubversionでどんな風にできるんだ、と探した所、既にそういうプラグインがあるんですね;すごいな;
なんか色々出てきたのですが、使いやすそうな以下2つに絞りました。

Maven SVN Revision Number Plugin
http://code.google.com/p/maven-svn-revision-number-plugin/
・Build Number Maven Plugin
http://mojo.codehaus.org/buildnumber-maven-plugin/index.html

とりあえず前者のMaven SVN Revision Number Pluginを試した所、ものの10分程度でリビジョンを画面表示することができました。

まずはHPのUsage情報から。
http://maven-svn-revision-number-plugin.googlecode.com/svn/site/usage.html

pom.xmlに以下を追加しました。上記情報そのまんま…。

<plugins>
    <!-- SubversionのリビジョンをMavenを通じてsvn.propertiesファイル出力するため追加 -->
    <plugin>
        <groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
        <artifactId>svn-revision-number-maven-plugin</artifactId>
        <version>1.13</version>
        <executions>
            <execution>
                <goals>
                    <goal>revision</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <entries>
                <entry>
                    <prefix>prefix</prefix>
                </entry>
            </entries>
        </configuration>
   </plugin>

続けて、このmavenのfilter機能なるものを使って情報をファイルに転記させます。
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
pom.xmlへ以下を追加しました。これもそのまんま…。

<build>
    <!-- filter機能でresourcesへ出力 -->
    <resources>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

で、以下resourcesフォルダにファイルを配置。

ファイルの中身は一旦これ↓だけです。リビジョンだけでなく色々書けるようですので、また別途調査しなきゃ。

revision = ${prefix.revision}

で、取得処理は以下のような感じで行いました。
Javaのリソース情報取得はなんか色々やり方があるようで少し戸惑い気味。
各々どう違うか、時間をみて整理しないと;今回はgetResource使いました。

private String getVersionInfo(){
    URL url = this.getClass().getResource("/svninfo.properties");
        
    if(url == null){
        Log.debug("システムバージョン情報が取得できません。");
        return "";
    }
        
    Properties prop = new Properties();
    try {
        prop.load(url.openStream());
    } catch (IOException ex) {
        Log.error("リソースファイルの読み込みに失敗しました。");
        return "";
    }
    
    return prop.getProperty("revision");
}

あとはxhtmlから変数を参照させて画面表示するだけです。

画像的にわかりにくいですが、上はJenkinsからSubversionの履歴みたもので、リビジョン431です。下は実際画面に表示させたリビジョンで、ちゃんと431となっています。

とりあえず内部要望を満たせそうです。ふぅ。

これでさらにweb.xmlのjavax.faces.PROJECT_STAGEがProduction以外は表示しない、などにすればいいのかな。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村