Maven2の社内リポジトリ(Internal Repository)をWebDAVで構築する

感想おまちしてます!

Maven2のリポジトリ名称がよくわからなかったので、Introduction to Repositoriesを参考にまとめてみると、以下みたいになる。

  • central repositoryはMaven2で建ててくれている中央リポジトリ
  • remove repositoryはSeaserのリポジトリみたいにサードパーティーの建てたリポジトリ
  • local repositoryはローカルでMavenを動かしたとき中央やリモートのリポジトリからダウンロードしてくる場所。デフォルトでは「USER_HOME/.m2/reposiotry」になる
  • internal repositoryは、社内リポジトリとか呼ばれている、社内で建てたリポジトリ

今回は、会社で作ったライブラリを補完できる、社内リポジトリを作ってみる。
デプロイとかができるようにWebDAVで作る。
スペシャルサンクスはUbuntuにMaven2リポジトリをWebDAVで構築する – yummy-yummyさん

スポンサーリンク

まずはApache

リポジトリとはいっても、ApacheでWebサーバを建てて、WebDAVを有効にしただけのもの。敷居が高そうに見えたけど、簡単にできた。
まずは、httpd.confを設定。今回はvhostを分けた。

 Listen 50000
NameVirtualHost *:50000
<virtualhost *:50000="">
DocumentRoot "C:\fujihara\Apache Software Foundation\Apache2.2\htdocs"
ServerName localhost
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
<directory c:\fujihara\apache="" software="" foundation\apache2.2\htdocs\maven2="">
Options Indexes FollowSymlinks
order Allow,Deny
Allow from all
</directory>
DAVLockDB "C:\fujihara\Apache Software Foundation\Apache2.2\dav\DAVLock"
<location maven2="">
Dav on
DavMinTimeout 600
</location>
</virtualhost>

WebDAVの設定も簡単。これで、http経由で、ファイルをプットしたりできる。
あとは、DAVLockファイルの置き場所や、htdocsにmaven2のディレクトリを作っておく。
Apacheを起動して、「http://localhost:50000/maven2/」にアクセスすると、Parent Directoryだけ表示されるはず。

これでリポジトリ作成は終わり。

注意点は、Linuxで作ったときに、htdocs/maven2の権限を、Apacheの実行ユーザが書き込みできるようにしていないと、ディレクトリが作れないと怒られた。

Maven2からデプロイしてみる

pom.xmlに以下を記述。

 <?xml version="1.0" encoding="UTF-8"?>
<project>
・・・
<distributionManagement>
<repository>
<uniqueVersion>true</uniqueVersion>
<id>localhost.maven2</id>
<name>Local Repository</name>
<url>dav:http://localhost:50000/maven2
</url>
</repository>
<snapshotRepository>
<uniqueVersion>true</uniqueVersion>
<id>localhost.maven2</id>
<name>Local Snapshot Repository</name>
<url>dav:http://localhost:50000/maven2/snapshot
</url>
</snapshotRepository>
</distributionManagement>
・・・
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-webdav</artifactId>
<version>1.0-beta-2</version>
</extension>
</extensions>
</build>
</project>

これを実行すると、http://localhost:50000/maven2にデプロイされ、画面でも表示されるはず。Snapshot用リポジトリを設定しておき、バージョンに「0.0.1-SNAPSHOT」とSNAPSHOTサフィックスをつけると、まだ試験中のJarファイルはSnapshotリポジトリにデプロイとできる。

社内リポジトリを使う

pom.xmlに以下を記述。そうすれば、ローカルリポジトリにダウンロードされる。

 <?xml version="1.0" encoding="UTF-8"?>
<project>
<repositories>
<repository>
<id>localhost.maven2</id>
<name>Local Repository</name>
<url>http://localhost:50000/maven2
</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>maven2sample</groupId>
<artifactId>maven2sample</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
</project>

Maven2はリポジトリを建てるまでがMaven2

藤原は、Maven2のディレクトリ構成と、Antみたいにがんばらないところが好きなんだけど、社内リポジトリを建ててみて、「ここまでやってMaven2は生かされる」と感じた。

理由は、

  • CIサーバ(Hudson)とかと連携が楽で、自動ビルド環境がさらりとできる
  • Jarファイルへのアクセスがhttpになる

になり、Jarファイルへのアクセスがhttpになると、仕事でJarをリリースするときに、SVNなどから落としてくる必要がなくなる。

つまり、SubversionみたいなSCMクライアントをサーバに入れなくてよくなるんですよねー。JarをSubversionに入れるのに抵抗を感じていたので、これで納得。
これで、SCMに依存する運用が消える(Maven2のサイトにも「Why not Store JARs in CVS?」って書いてあったりする)。

社内リポジトリはかなり使えそう。