再考・Maven2+Hudsonによる1clickリリース管理
前回簡単にまとめた方式ですが、運用してみて大きな落とし穴がありました。まぁMavenの制約なんですけど、、、本当、Mavenって飼い慣らすのが大変。
前回の方式の問題点
- 前回まとめた方式では、バージョン番号を変数とする方式としていました。
- 具体的に、以下のような感じ。
タグには${releaseVersion}と変数で書いておき、 タグでデフォルト値を設定しておく(このデフォルト値が日々のSNAPSHOTビルドのバージョン番号となります)。 - Hudsonからのリリースビルド時は、-DreleaseVersion=1.0とリリースバージョンを渡す。1.0という数字は、HudsonのParameterized Buildを使用して、ビルド時に画面から入力できるようにする。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>sample</artifactId> <packaging>jar</packaging> <version>${releaseVersion}</version> <name>Sample</name> <properties> <releaseVersion>1.0-SNAPSHOT</releaseVersion> </properties> ・・・ </project>
- この方式は、単独のプロジェクトであれば問題ありません。しかし、プロジェクト間で依存関係のある場合に問題があることが分かりました。
- 上記のようなPOMを持つプロジェクトをビルドし、リモートリポジトリにデプロイしても、実は
タグは${releaseVersion}のままのようです*1。 - で、このPOMを他プロジェクトから参照した場合、どうも
の部分で書いている変数が解決されないようです。 - 問題を確認したプロジェクト構成は以下のような構成でした。
ProjectX -----依存-----> ProjectY ----親参照----> ParentZ
- ProjectXからYは解決できるのですが、YからZへの親への参照時にZのバージョン番号が解決できずにエラーとなってしまいました*2。ProjectYのpom.xmlは以下のような内容です。
タグで親を参照していますが、 タグの変数部分が解決できませんでした。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.example</groupId> <artifactId>Z</artifactId> <version>${releaseVersion}</version> </parent> <artifactId>Y</artifactId> <packaging>jar</packaging> ・・・ </project>
- なんとか${releaseVersion}部分を解決できる方法がないかググってみたり色々試してみたものの、お手上げ状態になってしまいました。