私は Ivy を少し使っていますが、まだ学ぶべきことがたくさんあるようです。
私は2つのプロジェクトを持っています。1 つは Web アプリで、もう 1 つは Web アプリが依存するライブラリです。セットアップは、ライブラリ プロジェクトが jar ファイルにコンパイルされ、Ivy を使用してプロジェクト内のディレクトリに発行されることです。Web アプリのビルド ファイルには、Ivy resolve ant タスクを呼び出す ant ターゲットがあります。
私がやりたいことは、開発中 (開発者のローカル マシン上) に動的解決モードを使用する Web アプリと、テストおよび運用ビルド用の既定の解決モードを使用することです。以前は、ライブラリ アーカイブ ファイルにタイム スタンプを追加して、Web アプリがファイルへの依存関係を解決しようとしたときに、Ivy がファイルの変更を認識できるようにしていました。Eclipse 内では、Web アプリでは新しいライブラリ jar が公開されるたびにプロジェクトを更新し、ビルド パスを微調整する必要があったため、これは面倒です。似たような名前の jar ファイルを毎回発行すると、開発者はプロジェクトを更新するだけで済みます。
問題は、Web アプリが動的 jar ファイルを取得できないことです。
私が得る出力は次のようになります。
resolve:
[ivy:configure] :: Ivy 2.1.0 - 20090925235825 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = /Users/richard/workspace/webapp/web/WEB-INF/config/ivy/ivysettings.xml
[ivy:resolve] :: resolving dependencies :: com.webapp#webapp;working@hoth-3.local
[ivy:resolve] confs: [default]
[ivy:resolve] found com.webapp#library;latest.integration in local
[ivy:resolve] :: resolution report :: resolve 142ms :: artifacts dl 0ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 1 | 0 | 0 | 0 || 0 | 0 |
---------------------------------------------------------------------
[ivy:resolve]
[ivy:resolve] :: problems summary ::
[ivy:resolve] :::: WARNINGS
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: UNRESOLVED DEPENDENCIES ::
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :: com.webapp#library;latest.integration: impossible to resolve dynamic revision
[ivy:resolve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:resolve] :::: ERRORS
[ivy:resolve] impossible to resolve dynamic revision for com.webapp#library;latest.integration: check your configuration and make sure revision is part of your pattern
[ivy:resolve]
[ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
BUILD FAILED
/Users/richard/workspace/webapp/build.xml:71: impossible to resolve dependencies:
resolve failed - see output for details
Web アプリの解決ターゲットは次のようになります。
<target name="resolve" depends="load-ivy">
<ivy:configure file="${ivy.dir}/ivysettings.xml" />
<ivy:resolve
file="${ivy.dir}/ivy.xml"
resolveMode="${ivy.resolve.mode}"/>
<ivy:retrieve pattern="${lib.dir}/[artifact]-[revision].[ext]" type="jar" sync="true" />
</target>
この場合、ivy.resolve.mode の値は「dynamic」です (引用符なし)。
Web アプリの Ivy ファイルは単純です。次のようになります。
<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="com.webapp" module="webapp"/>
<dependencies>
<dependency name="library" rev="${ivy.revision.default}" revConstraint="${ivy.revision.dynamic}" />
</dependencies>
</ivy-module>
開発中、ivy.revision.dynamic の値は「latest.integration」です。一方、本番またはテスト中、「ivy.revision.default」の値は「1.0」です。
何か案は?他に提供する必要がある情報がある場合はお知らせください。
ありがとう!