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>
とか書いておけばいいらしい。
めんどくさすぎる。