今までの開発はC#&WindowsFormメインで、ソース管理ツールはVSSしか使ったことがありませんでした。
部内の一部チームではSubversionを利用しているようで、JavaEEプロト開発はそういった面を考慮してSubversionを使うことにしています。個人的にはGitも使ってみたかったのですが。
VSSは完全にソースコードを排他制御するので、誰かが編集中(チェックアウト中)だと自分は編集できません。
これで育ったもので、チェックアウトされたコードを自分がいじりたくなるケースがあると、それを触っている人に「今何書いてます?」みたいな会話をして調整してきました。
これはこれで、開発者同士、健全なコミュニケーションが取れるので好きでした。
で、Subversion。こちらもVSSみたいなモードにできるらしい(人づて情報で未調査…)ですが、デフォルトは特に排他はありません。同じソースを編集していてもOKで、マージなどができる形です。
プロト開発はVSS育ちの2人でやっているので、何とも慣れなれず、今は「これ触るよ?」「あいよ」みたいな声かけをしています(苦笑)これはあまりにダサいので、はやいところマージ感覚に慣れたい所です;
……
…
さて、今日の本題。
そんなSubversionを使っている中、上の人から「プロトの画面に、ソースのバージョンとか出してほしい」とのお話が出ました。こんなことVSS時代でもやってなくて色々めんどくさそう…はたしてMavenやSubversionでどんな風にできるんだ、と探した所、既にそういうプラグインがあるんですね;すごいな;
なんか色々出てきたのですが、使いやすそうな以下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>
<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>
<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以外は表示しない、などにすればいいのかな。