Maven で headless build.バッドノウハウ,ザクザク

うへぇ.バッドノウハウの塊っぽいぞ.でも便利ではある.困ったもんだなぁ.

featureのバージョンをqualifierにしている場合の回避法.

featureのバージョンをqualifierにしていると,ビルドまでは通るが,installやdeploy時にエラーになる.

[INFO] [install:install]
[INFO] Installing /Users/monaka/svk/pizza-ipa-oss/3.2/crosschains/common/trunk/features/jp.pizzafactory.crosschains/jp.pizzafactory.crosschains_1.0.0.qualifier.bin.dist.zip to /Users/monaka/.m2/repository/jp/pizzafactory/crosshains/common/3.2.2-SNAPSHOT/common-3.2.2-SNAPSHOT.zip
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error installing artifact: File /Users/monaka/svk/pizza-ipa-oss/3.2/crosschains/common/trunk/features/jp.pizzafactory.crosschains/jp.pizzafactory.crosschains_1.0.0.qualifier.bin.dist.zip does not exist

こんな感じ.

試行錯誤した結果,antrunとreplaceタスクを使うのが楽そうだという結論になった.

     <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>process-resources</phase>
            <configuration>
              <tasks>
                <replace file="feature.xml" token=".qualifier" value=".${project.version}" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

こんな感じ.運用上の制約事項がいくつかある,project/version の値には「.」を含めてはいけない.また,同名のフィーチャーで中身が違う物がたくさんできる可能性がある.まあ,リリースタグを打った後のコンテンツに.qualifier 入りのバージョンを入れるような無神経には,対応しなくてよいのではなかろうかと.