miau's blog?

Maven2 で外部 .jar を社内リポジトリに格納

今回のシステムでは統合ビルドツールに Maven2 を使ってます。Ivy & Ant なんて組み合わせもあるようですが、私が今回アーキテクトっぽいポジションであるにもかかわらず Java の経験が浅いので「標準的な構成が決まってるし、ぜんぶまとめてやってくれるからこれがいい!」と即決したわけです。

Maven2 を使えば依存関係を解決して勝手に .jar をダウンロードしてくれたりして楽なんですが、ライセンスの関係やらで Maven2 のリポジトリが公開されていない場合、
・自前でローカルリポジトリにインストール
・社内リポジトリを準備してそこに配置
のどちらかを実施する必要があります。

ググると前者の方法がよくヒットするんですが、今回私は「各開発メンバに環境構築を最低限の手順で行ってもらう」というのを目指しているので(この辺はきっと別項で書きます)後者の方法を試してみました。




■Maven2 や社内リポジトリの概要

blog で Maven2 とかに触れるのははじめてなので、参考サイトなんかも軽く紹介。どちらもググるとすぐ出てきますが。

構成管理 実践入門 第1章 構成管理入門
→WEB+DB PRESS Vol.39掲載の記事。構成管理全体についての説明あり。Maven2 については第4章以降に。

Maven-TECHSCORE-
→Maven2 について色々解説。AutoPagerize で一気読みできるのでいい感じ。

で、前者の記事には社内リポジトリについても記述があります。

概念について
第4章 Maven2によるビルド入門 まずは試してみよう

構築方法について
第5章 Maven2ベストプラクティス 社内リポジトリ - 自分たちのライブラリ置き場

でもこれは自分で作ったライブラリを社内リポジトリに置く手順であって、外部の .jar ファイルを管理する手順じゃないんですよね。

■社内リポジトリの準備

参考サイトに書いてあるように、社内リポジトリはただの Web サーバ等で OK です。特に今回は外部 .jar を置くだけなので、ここに自動でデプロイすることも考慮しなくてよかったりします。

今回は .pom いじったり試行錯誤することも考慮して、SVN で適当に http://xxx.xxx.xxx.xxx/svn/proj/maven2 というようなディレクトリを作ってここに配置しました。いずれちゃんとしたサーバに移動させると思いますが。

■.jar の配置

○前置き

最低限必要な作業は Maven2 リポジトリの構成に合わせた形で .jar ファイルを置くだけです。でも .pom ファイルがあったほうがそのライブラリからの依存関係も設定しやすいし、.md5 があったほうが警告が出ないし、ということであらかじめひととおり作っておくと楽です。

実は当初 .pom を置かないとエラーになると思い込んでたんですけど、たぶんこれは <dependency> に <type>jar</type> が指定されてなかったからですね・・・。.pom なくても動いてるやつありますし。

○対象

今回は Jave で Oracle を使うので、Oracle JDBC Driver を置いてみることに。ojdbc14 であれば以下の URL に入手元が載ってたけど、今回使いたいのは JDK 1.6 対応の ojdbc6.jar で、たぶんこれはどこにも公開されてないんじゃないかと。

JDBCドライバのリポジトリは? - よねのはてな

○手順

(1) 対象の .jar を適当にダウンロード

以下の URL からダウンロード。ここでは C:\temp\ojdbc6.jar に置いたことにします。

ダウンロード - Oracle JDBC Driver 11.1.0.6

(2) ローカルリポジトリにインストール

こういう野良っぽい .jar ファイルだと groupId とかの設定に迷ってしまいますが、とりあえず oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.jar としてインストールすることにします。

リポジトリにあわせた階層掘って .pom ファイル作って .md5 作って・・・とやってもいいんですが、面倒なので一旦ローカルリポジトリにインストールしてしまいます。

mvn install:install-file -Dfile=C:\temp\ojdbc6.jar -DgroupId=oracle -DartifactId=ojdbc6 -Dversion=11.1.0.6.0 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true

-DcreateChecksum=true がポイント。これで .md5 が生成されます。(.sha1 を生成しない方法もありそうですが調べてません。)

ローカルリポジトリ(%USERPROFILE%\.m2\repository)を開くと以下のファイルが生成されていると思います。

oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.jar
oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.jar.md5
oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.jar.sha1
oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.pom
oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.pom.md5
oracle\ojdbc6\11.1.0.6.0\ojdbc6-11.1.0.6.0.pom.sha1
oracle\ojdbc6\maven-metadata-local.xml

(3) 社内リポジトリにインストール

.md5 と .sha1 はどちらか一方があればいいようなので、ojdbc6-11.1.0.6.0.jar.sha1 と ojdbc6-11.1.0.6.0.pom.sha1 は削除します。maven-metadata-local.xml もローカルリポジトリ用のデータのようなので削除。

で、これを社内リポジトリ以下に・・・ http://xxx.xxx.xxx.xxx/svn/proj/maven2/oracle/ojdbc6/... のような形で格納します。

(4) pom.xml の設定

特に変わったこともないんてすが、まあこんな感じで。

<project>
:
<repositories>
<repository>
<id>in-house</id>
<name>in-house</name>
<url>http://xxx.xxx.xxx.xxx/svn/proj/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.6.0</version>
</dependency>
</dependencies>
:
</project>

もし SVN で認証かけてるんであれば settings.xml にin-house 用の認証設定を追加する必要があるとおもいます。

確認のために %USERPROFILE%\.m2\repository\oracle は一旦削除して、mvn test とかなんとか適当に実行。途中でちゃんと ojdbc6-11.1.0.6.0.jar がダウンロードされるはずです。

■どうでもいい疑問

pom.xml のインデントや改行コードについて、
・mvn で作ったもの→スペースでインデント&改行は LF
・m2eclipse で作ったもの→タブでインデント&改行は CRLF
という感じでルールがいまいち統一されてないんだけど、どちらかに統一してほしい。

・・・と書いてて気づいたけど、もしかして m2eclipse のほうは Eclipse の設定に引きずられてるだけ?


(2009-02-17 追記)

pom.xml の編集が必要なケースについても書いたのでリンク。

社内の Maven2 リポジトリに djUnit を格納する - miau's blog?


(2009-02-18 追記)

「ググると前者の方法がよくヒットするんですが」とかなんとか書きましたが、探し方が悪かっただけのようで。しっかり解説されている方がいらっしゃいました。

Mavenプロジェクトで3rdパーティJARを扱う方法|Ouobpo

違うのは一回ローカルに入れちゃうってところくらいかな。

さらにトラックバックたどったりするとよさげ。
posted at 08:44:33 on 2008-11-25 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。