Maven2 のアーティファクトバージョン指定フォーマット
Maven2 で、アーティファクトのバージョン指定をするときには、"1.0.2" のように完全にバージョンを固定するのではなく、"1.0.x" の x の部分は最新版を自動で使う、のような指定もできる。でも、そもそも公式サイトのどこに記法についてのドキュメントがあるのかよくわからない……。
ということで、一番確実なソースを見てみることにする。2.0.x/2.1.x ではどこにあるかというと、
maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
の createFromVersionSpec メソッドあたりのようだ。Javadocに書いてある内容は、
1.0
- バージョン1.0
[1.0,2.0)
- バージョン1.0以上、2.0未満
[1.0,2.0]
- バージョン1.0以上、2.0以下
[1.5,)
- バージョン1.5以上
(,1.0],[1.2,)
- 1.0以下または1.2以上
ということで、つまり概ね
- カギ括弧は、そのバージョンを含む範囲の開始(左括弧の場合)、または終了(右括弧の場合)
- 丸括弧は、そのバージョンを含まない範囲の開始(左括弧の場合)、または終了(右括弧の場合)
- カンマは、バージョンの範囲を区切る
のようだ。
つまり、たとえば Wicket の 1.3.x の最新版を使いたければ
<dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket</artifactId> <version>[1.3,1.4)</version> </dependency>
になりそうだ。単に [1.3,)
だと、1.3.x だけでなく 1.4 なども使われてしまう。
…というのをMacのNetBeansで試してみると、「No versions are present in the repository for the artifact with a range」とか言われてビルドエラー。NetBeansのMaven Pluginが内蔵しているMavenだとうまくいかないようなのでプロジェクトのプロパティで「Use External Maven for Build Execution」にチェックを入れたら直った。なんだかよくわからない。