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?」って書いてあったりする)。
社内リポジトリはかなり使えそう。
コメント
[…] ※ http://daipresents.com/2009/maven2_internal_repository_webdav/ […]