Mavenでwebdavにdeploy-file

mavenで、hogehoge.jarをwebdavを通して俺リポジトリにdeploy-fileしようとした。

$ mvn deploy:deploy-file \
    -Dfile=hogehoge.jar \
    -DgroupId=jp.paulownia \ 
    -DartifactId=hogehoge \
    -Dversion=1.0.8 \
    -Dpackaging=jar \
    -DgeneratePom=true \ 
    -DrepositoryId=inhouseRepository \ 
    -Durl=http://example.com/maven2

しかし、ディレクトリを掘ってくれないのでアップロードに失敗する。Authorization failedとか言われるが認証は全然関係ないっぽい。

[INFO] Error deploying artifact: Authorization failed: Access denied to: http://example.com/maven2/jp/paulownia/1.0.8/hogehoge-1.0.8.jar

wagon-webdavなる拡張を利用すればディレクトリを掘ってくれるようだ。

$ mvn deploy:deploy-file \
    ...
    -DrepositoryId=inhouseRepository \ 
    -Durl=dav:http://example.com/maven2

しかし、最後のjarファイルのアップロード(PUTメソッド)で死んでしまう。

org.apache.commons.httpclient.HttpException: Unbuffered entity enclosing request can not be repeated

どうやらwagon-webdavが依存しているHTTP Client 2.0.2の問題らしい。バージョンを上げられればうまく行きそうだが方法が分からない。困った。しかしこの時点でディレクトリは掘られているのでwagon-webdavを使わずに…

$ mvn deploy:deploy-file \
    ...
    -DrepositoryId=inhouseRepository \ 
    -Durl=http://example.com/maven2

でアップロードできる。できるけどいろいろ間違っている。
HTTP認証ユーザ・パスワードは$HOME/.m2/settings.xmlファイルに記述し、-DrepositoryId=inhouseRepositoryでsettings.xmlの中のサーバ設定を選ぶ。

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <servers>
    <server>
      <id>inhouseRepository</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
</settings>

wagon-webdavを使うにはpomファイルを作って

  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav</artifactId>
      </extension>
    </extensions>
  </build>

とか書いておけばいいらしい。

めんどくさすぎる。