概要
作成したwarの中にgitのリビジョン情報があると何かと便利です
いつのコミットから生成されたwarなのか知りたいケースは多いと思います
Mavenを使ってリビジョン情報を埋め込むことができたので紹介します
環境
- Windows7 64bit
- Java 1.8.0_25
- Maven 3.2.2
- buildnumber-maven-plugin 1.3
- maven-war-plugin 2.6
Mavenでサンプル用のWebアプリプロジェクトを作成
適当に作成すればOKです
すでにmvn package
でwarが作成できるプロジェクトがあればそれでもいいです
ない場合はこちらを参考に作成してください
Eclipseの場合はMavenプロジェクトを作成する際にアーティファクトIDにmaven-archetype-webapp
を選択してサンプルプロジェクトを作成してください
また、今回はプロジェクト自体がgitリポジトリで管理されていることを想定しているのでプロジェクトをgit化してください
リモートリポジトリはなくてもいいのでgit init
できていればOKです
Eclipseの場合は
Team -> Share Project -> Git -> Use or create repository in parent folder or project -> Create Repository
としてgit化してください
そしてgit add
->git commit
としてはじめのコミットを作成しておきましょう
buildnumber-maven-pluginの設定
pom.xmlを編集します
<build> -> <plugins>
タグ内に以下のプラグインを追加します
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
</configuration>
</plugin>
上記を記載することでbuildnumber-maven-pluginが有効になります
ポイントはdoCheck
とdoUpdate
のタグの部分です
falseを設定することで以下の効果があります
- git statusを使って差分チェックをしなくなります
- git pullをして最新のソースをremoteからマージしなくなります
上記が有効だとmvnビルドするのにいちいちgitコミットしなければいけないのとgit pullをするための認証情報の設定を別途記載する必要があります
trueでも設定さえちゃんとされていればビルドは次に進みますが個人的にはyak shavingしているだけの印象だったのでfalseを設定しました
また、falseを設定することでgitコマンド自体が不要になるのでEclipse上でmvnビルドしている場合は
[ERROR] ‘git’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
というエラーが出るのを回避することもできます
warをアーカイブするときにManifest.MFを拡張
Manifest.MFを拡張するにはmaven-war-pluginを定義し直します
pom.xmlを編集します
<build> -> <plugins>
タグ内に以下のプラグインを追加します
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifestEntries>
<Implementation-ScmBranch>${scmBranch}</Implementation-ScmBranch>
<Implementation-Build>${buildNumber}</Implementation-Build>
</manifestEntries>
</archive>
</configuration>
</plugin>
ポイントは<archive> -> <manifestEntries>
内の2つの宣言で特にvalueの変数が重要です
buildnumber-maven-pluginを有効にすることで${scmBranch}
と${buildNumber}
という変数が使えるようになります
ここで指定するタグは何でもOKです
記載したタグ情報がそのままManifest.MFに記載されることになります
scm の設定を追記
どこのgitのリビジョン情報を参照するのかpom.xml内に記載する必要があります
この設定は<project>
タグ直下に記載してください
この定義がないとcreate failed: The scm url cannot be null.
という言われて怒られます
以下の設定をpom.xmlに記載します
<scm>
<connection>scm:git:file://.</connection>
<developerConnection>scm:git:file://.</developerConnection>
<url>scm:git:file://.</url>
<tag>HEAD</tag>
</scm>
今回の想定はプロジェクト自体がgitで管理されていることを想定しています
なのでプロジェクト自体を指し示すようにscmを定義します
もちろんここにはGithubのURLやイントラネット内にあるgitリポジトリを指定することも可能です
ビルドしてみる
ここまで設定できたらビルドしてみましょう
コマンドで実行する場合は
mvn package
でOKです
Eclipseで実行する場合はRun As -> Maven build でgoalsにpackageを指定して実行しましょう
ビルドが成功するとtargetディレクトリ配下にwarファイルが作成できています
このwarファイルを解凍してMETA-INF/Manifest.MF
を見てみましょう
以下のようにリビジョン情報とビルドしたブランチ情報が追記されていればOKです
Manifest-Version: 1.0
Built-By: kakakikikeke
Build-Jdk: 1.8.0_25
Implementation-ScmBranch: master
Created-By: Apache Maven 3.2.1
Implementation-Build: 29fb55a9daa2afc3961b9759d0f4e50ca3cac281
Archiver-Version: Plexus Archiver
紹介は以上です
今回はリビジョン情報を埋め込みましたがManifest.MFには他にもいろいろな情報を埋め込めるので好きな情報を埋め込むといいと思います
0 件のコメント:
コメントを投稿