日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

Maven リポジトリに登録されてない外部ライブラリを使う

前提として leiningen と Maven はインストール済とします。

tnoda-clojure • Clojure で Java FX (1): Hello World

上記 URL を参考にした。
手順としては Maven でローカルリポジトリ登録を実施するのみ。

二の足を踏んでたのはこうした後 uberjar でちゃんとライブラリ含まれるのかの確認をサボってた。
以下 Oracle JDBC である ojdbc で試してみた時のメモ。

>mvn install:install-file -DgroupId=local.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc14.jar

上コマンドでローカルリポジトリに登録した時の project.clj の指定は以下のようになる。

 [local.oracle/ojdbc14 "10.2.0.3.0"]

ソースファイルでの require は ojdbc を直接は使わないので割愛。
後は odjbc を使う lein project を uberjar してやれば無事動いた。

宿題

今回の例のように ojdbc などを一つの jar に含めるのはライセンスがどうなのとかファイルサイズ
が肥大してしまうが、それはまた次の機会に。

パッケージングする jar から外出しする方法(uberjar 生成 jar の動作は未確認)

最初にちょっと触れた外部ライブラリを uberjar から外出しする方法は以下を参考。
Clojure+LeiningenでJavaFXプログラミング - Kuchitama Tech Note

ただ、こっちで試した時は JavaFX の jar をコピーして持ってこずに JDK インストール時に元々
あるパスを絶対パスで指定すると言うちょっと異なる方法を取ったら、lein run は動作するもの
のuberjar でパッケージング後は何故か動作せず。こちらの原因・対処はまたいずれ調べる事に。

Oracle 提供の jar ファイルをリポジトリ登録する場合の注意

どうもこの手のは何故か Oracle に多く*1以下の URL では推奨 groupId と artifactId の一覧がある。
http://www.techscore.com/tech/Java/ApacheJakarta/Maven/7/#maven-6-10

が、そいつを推奨する理由が良く分からん。ローカルに登録するなら最初の tnoda さんの所にある local を頭に付けた方が区別できて良い気がする。

*1:MavenOracle から提供されたものじゃないからか?