pom.xmlの依存ライブラリを.classpathに反映させるMavenプラグインを試験公開します

id:jflute さんのエントリがきっかけでニーズがありそうなことがわかったので、少し前に個人的に作ったMavenプラグインを試験公開します。

どんなプラグイン?

ひと言でいうと、Maveneclipseプラグインdependencyプラグインを足して2で割ったような機能を提供します。eclipse+classpathを文字って「eclipath」プラグイン。(相変わらずネーミングセンスありませんね。良いアイデア募集)

具体的には、pom.xmlに記述された依存ライブラリをeclipseプロジェクト上にコピーして、.classpath にクラスパスを追加します。ついでにソースやJavadocもあれば自動的にアタッチします。

pom.xmlの依存ライブラリを.classpathに反映させるだけならば mvn eclipse:eclipse でできますが、これだと既存の .classpath を再生成して上書きされてしまいます。eclipathプラグインは、既存の .classpath を読み込んで変更点だけ修正するので、eclipse に優しく、かつ依存ライブラリ管理ははpom.xmlに集約できます。

使い方

プラグインseasar.org にて公開させていただいているので、pom.xml の pluginRepositoryにseasar.orgを追加してください。

  
    
      maven.seasar.org
      The Seasar Foundation Maven2 Repository
      http://maven.seasar.org/maven2
    
  

あとは、plugins 要素の中に以下のように maven-eclipath-plugin を追加するだけ。
最低限ならこれだけで設定完了。

    
    ・・・・
      
        org.seasar.uruma
        maven-eclipath-plugin
      
    ・・・・
    

あとは、コマンドラインから

 mvn eclipath:sync

と打ちます。これで、pom.xmlの依存ライブラリ(jar)が eclipse プロジェクト配下の lib ディレクトリにコピーされ、.classpath にそれらのjarへの参照が自動設定されます。.classpathを読み込んで差分だけ更新して書き戻す仕様なので、独自にクラスパスコンテナなどを設定していても、それらの設定は残されます。

依存ライブラリが増えたり、バージョンアップしたときも、pom.xml を更新して eclipath:sync。新しいバージョンのjarを.classpathに追加して、古いものは削除します。

ただし、安全のため古いバージョンのjar自体はeclipseプロジェクトから削除しません。古いバージョンのjarを削除したいときは、

 mvn eclipath:clean

でjarファイルを削除します。

何が削除されるか事前に確認したいときは、

 mvn eclipath:check-clean

で削除するファイルの一覧だけ表示します。

また、pom.xmlの packaging もチェックしているので、Webアプリケーションでwarとなっている場合は、ライブラリのコピー先が src/main/web/WEB-INF/lib に切り替わります。

さらにscopeもチェックしているので、scopeがprovidedやtestになっているjarは、src/main/web/WEB-INF/lib ではなく、lib にコピーしたりします。(この辺のコピー先は細かく制御しようとすると設定が面倒になるので、eclipathプラグインで勝手にポリシーを決めています。利用者が多そうならば、すこしずつブログで紹介します)

もうちょっと細かい機能もいくつかありますが、とりあえず最低限の使い方を紹介してみました。

現時点での制限事項

  • 利用者の皆様のご意見や、作者の気まぐれでプラグイン名や仕様は変更する可能性があります
  • マルチモジュールプロジェクトではまだ試していませんので不具合がでるかもしれません
  • Maven3.0では一切動作試験していません
  • Windows環境でしか試験していません
  • mvn eclipse:eclipse と違って、.classpathをゼロから生成する機能は提供していません。(依存ライブラリに関する pom.xml と .classpath の同期を取ることに特化しています)
  • ソースコードJavadocは英語で書こうと頑張って途中で面倒になりました(笑)

要望/不具合報告などあればコメントいただければ対応検討します。(今あまり時間が取れないので、対応が遅くなる可能性大ですが・・・)