code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IvyDEでクラスパスに追加になったjarファイルをbuild.xmlで参照する

IvyDEでクラスパスに追加したjarファイルをbuild.xmlから参照できるようにする設定の紹介。

Retrieve dependenciesに書いてある設定をするだけだったんだけど、気づくのに時間がかかった。

Apache Ivyとbuild.xml

Apache Ivyが手放せなくなってきた。mavenも少しトライしてみたが撃沈、、、本体だけの機能じゃなくプラグインを使いこなさなければいけないというのはどうにも合わない。Eclipseにもできるだけプラグインは入れたくないのでPleiadesとかも使ったことがない。

それに比べてそれ単体で必要な機能が必要なだけ揃っているIvyは使いやすい。Ivyがないとライブラリの更新をするのが面倒に感じる。今は50個近いjarを管理しているのだが(何故そんなに!?という話は割愛・・・)、ひとつひとつの公式サイトを定期的に訪問することは難しい。Mavenリポジトリを経由しているので本当の最新バージョンではないけど、一度ivy.xmlを作成してしまえば、微妙なマイナーバージョンアップとかをあまり気にしなくてよくなった。

私が無知なだけかも知れないが、普段はEclipseで開発しつつもwarファイルの生成時にはデバッグ時とは違うリソースを使わなければいけないため、warの作成はbuild.xmlで行っている。

build.xmlでwarを作成する場合、IvyではAnt用のタスクも用意されている(ivy:retrieve)のでそれを使うという手もあるが、Ivyの依存性の設定には常に最新バージョンを使っていたいので、うまく取れないライブラリ以外はlatest.releaseを指定して取ってきている。そのためかResolveする度に一服できる程の時間がかかる。

せっかくなのでEclipseのIvyDEで取ってきたjarをbuild.xmlで参照できないものかと調べた。IvyDEのデフォルト設定ではコンパイル時には.ivy2のキャッシュフォルダを参照し、war作成やデプロイ時にのみjarファイルを取ってきてしかるべき場所に配置してくれる。つまりプロジェクトから見える場所にはjarファイルは揃っていないということになる。

調べた結果Retrieve dependenciesに書いてある設定を行うことでダウンロードまたはキャッシュにヒットしたjarファイルを指定の場所にコピーしてくれるようになった。

あとはその指定された場所からファイルを参照すればいい。以下ダイジェストでそこまでの手順。

  • Eclipseをインストール
  • Apache IvyDEをMarketplaceからインストール
  • プロジェクトとivy.xmlを作成。ivy.xmlの例;
    <?xml version="1.0" encoding="UTF-8"?>
    <ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    
    	<info organisation="foo" module="foo-ivy" status="integration"></info>
    
    	<dependencies defaultconfmapping="*->default,sources,javadoc">
    		<dependency org="mysql" name="mysql-connector-java" rev="latest.release" transitive="false" />
    	</dependencies>
    </ivy-module>
  • ミラーサイトとか異なるレポジトリを参照したいならivysettings.xmlを作成(今回は略)
  • ivy.xmlを右クリックして「Add Ivy Library...」する
  • プロジェクトのJava Build PathとDeployment Assemblyにどうにかしてivy.xml [*]を加える。[*]の部分はivy.xmlの設定によっては異なってるかも
  • Java Resources→Libraries→ivy.xml [*]を右クリック→Resolve。量が多いととても時間がかかる。うまくダウンロードできたら展開できるようになった取り込まれたjarが出てくる(←今回はこれをbuild.xmlから入手しようというもの)
  • この時点でivy.xmlに書かれたライブラリを使ってEclipse上でデプロイしてデバッグとかはできるようになっているはず
  • さて、いよいよbuild.xmlから使うための準備。というより↑のAdd Ivy Library...の時点で設定しておいてもよい。今回は自分が辿った手順で書いているため、作業が分かれている
  • Java Resources→Libraries→ivy.xml [*]を右クリック→Properties→Classpathと辿る
  • 今回はプロジェクト単位の設定で解説。Enable project specific settingsにチェック
  • 値は好みだと思うけど、retrieved artifacts→Retrieve patternにbuild/lib/[type]s/[artifact]-[revision](-[classifier]).[ext]と指定した
  • Delete old retrieved artifactsは目視でバージョンアップを確認したいので未チェック。デバッグ用のソースコードはIvyDEの方で勝手にバインドしてくれるのでソースコードやjavadocが不要という場合はTypesのところは"bundle,jar"とかでもよいかも
  • これで改めてResolveする(また時間がかかる...)と、build/lib以下にフォルダが出来ていて、bundlesとかjarsに目的のjarが入っていた
  • 最後にbuild.xmlの例。
    <?xml version="1.0" encoding="UTF-8"?>
    
    <project name="foo" default="war" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
    	<target name="_copy_ivy_lib">
    		<copy todir="build/ant/WebContent/WEB-INF/lib>
    			<fileset dir="build/lib/bundles">
    				<include name="*.jar" />
    			</fileset>
    			<fileset dir="build/lib/jars">
    				<include name="*.jar" />
    			</fileset>
    		</copy>
    	</target>
    </project>
関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。