中間成果物を使用して構築するためにIvy/Antを使用する方法

私は私の個人的なプロジェクトのためにApacheのivyでantを使うようにビルドプロセスを修正しようとしています。これらは、いくつかの共有モジュールと、共有モジュールに依存するいくつかのアプリケーションモジュールで構成されています。この記事のために、共有モジュール(
common )と common に依存するアプリケーションモジュール(
application コード>。各モジュールには独自の効果的なsvnリポジトリがあります:

svn_repo_1/common/trunk
                 /branches
                 /tags
svn_repo_2/application/trunk
                      /branches
                      /tags

関連するリビジョンを共通のワークスペースに、フラットな構造でチェックアウトします。

workspace/common
workspace/application

一般的に、 applicationcommon
の公開バージョンに依存するため、 application

しかし、 application に必要な common
に新しい機能を追加する必要がある場合は、 application
(私のリポジトリに共通して公開する必要はありません)。

これは、 latest.integration が意味するもの(つまり、
application
のivy.xmlを変更して共通リビジョンのlatest.integrationを指定したもの)です。私の意図は、ivy
buildlist
タスクを使ってアプリケーションをビルドする前にビルドが必要なローカルモジュールを探すことでした。しかし、アプリケーションのivy.xmlファイルがlatest.integrationやその他の公開されたリビジョンを指定しているかどうかにかかわらず、
buildlist
タスクにcommon/build.xmlエントリが含まれているように見えるため、これは機能しません。

私は何か提案を感謝します。私はアイビーのドキュメンテーションとサンプルに苦労しているので、実際の例も参考になります。注:ここではMavenのソリューションに興味はありません。

ベストアンサー

うわー、これは本当にdeja vuです! 3 –
4ヶ月前からこのサイトの私の最初の質問のいくつかに戻って、彼らはほとんどアイビー関連です!私はアイビーが学び、飼い慣らすのが難しい獣だと100%感謝しますが、それを専門的に数ヶ月使用した後、私は再びそれなしでは決して発展しません。だから私の最初のアドバイス:続ける。遅かれ早かれ、Apache
Ivyで見つけた小さな(実用的な)ドキュメンテーションはすべて意味を持ち始め、崩れ始めるでしょう。

なぜ common
をリポジトリに公開したくないのかを知ることができます。しかし、あなたが過渡的な依存性管理の新機能である場合、私があなたに与えることができる最初の実用的なアドバイスは、あなたのJAR/WAR
/その他をあなたのレポに常に公開するべきです。ワークスペースのローカルな「仲介」ではありません。

この理由は簡単です:Ivyには、設定ファイルで定義したリポジトリ(基本的に)をクロールする機能しかありません。これらの定義されたリポジトリの外にある
common
のようなJARを故意に保つと、(a)Ivyは推移的依存関係(主な仕事)を解決する方法がなく、(b) “下流”
common
を微調整するたびに動的に更新されません。したがって、IvyをJARを公開しないのみに使用することは、少し生産的です。私はアイビーがそれを機能として含むことさえ驚いている。

common を公開しないというあなたの動機を理解する必要があると思います。
ivy:publish
タスクを正常に動作させるのに問題がある場合は、心配する必要はありません。しかし、その他の理由がある場合は、複数のリポジトリを設定してください。

たいていすべてが公開される「プライマリ」リポジトリが1つあります。それであなたがそれを行うのが意味をなくても
common を公開する “二次”または “仲介”リポジトリがあります。次に、
publish-main
publish-integration
など、2つの異なる公開タスクでAntビルドを設定できます。

そうすれば、あなたは両方の世界のベストを得ることができます:あなたはあなたの仲介のステージングエリアを手に入れ、アイビーの強力なコントロールの中にすべてを残すことになります。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です