2011-11-13 7 views
1

自分の個人プロジェクトにantをapache ivyで使用するビルドプロセスを修正しようとしています。これらは、いくつかの共有モジュールと、共有モジュールに依存するいくつかのアプリケーションモジュールで構成されています。この記事のために、共有モジュール(common)とアプリケーションモジュール(application)が簡略化され、commonに依存しているとしましょう。 applicationはの公開バージョンに依存し、一般的には中間アーティファクトを使用してビルドするためにIvy/Antを使用する方法

workspace/common 
workspace/application 

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

私はフラットな構造で、共通のワークスペースに関連するリビジョンをチェックアウト:各モジュールは、それ自身の効果的なSVNリポジトリを持っていますcommonであるので、applicationをビルドするときにcommonをビルドする必要はありません。私はその後、applicationように私のワークスペースからの最新commonのビルドに依存するだろうしかし

、私はapplicationによって必要とされるcommonに新しい機能を追加する必要があり、(私のリポジトリに共通公開する必要はなし)。

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

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

答えて

1

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

commonをレポに公開したくない理由が間違っていることがあります。しかし、推移的な依存関係管理の新機能であれば、私が与えることができる最初の実用的なアドバイスは、常にあなたのレポにあなたのJARs/WARs /を公開することです。ワークスペースのローカルな「仲介」ではありません。

理由は簡単です。Ivyには、設定ファイル(基本的には)で定義したリポジトリをクロールする機能しかありません。のようなJARを意図的にこれらの定義されたリポジトリの外に置いた場合、(a)Ivyは推移的依存関係(主ジョブ)を解決できず、(b)「下流」のJARが動的に失敗するcommonを調整するたびに更新されます。したがって、Ivyのみを使用してを公開することはできません。 JARを公開することは少し生産的です。私はアイビーがそれを機能として含むことさえ驚いている。

commonを公開しないというあなたの動機を理解する必要があると思います。ivy:publishタスクを正常に動作させるのに問題がある場合は、心配する必要はありません。他のいくつかの理由がある場合でも、私はこのソリューションを考えるように頼む:は、複数のリポジトリを設定します。

おそらくあなたは、ほとんどすべてが公表されます1「プライマリ」のリポジトリを持っています。その後、あなたはそれはそれを行うために(あなたのための)意味があるたびにcommonを公開「二次」または「仲介」のリポジトリを持っています。次に、あなたのAntのビルドは、などの2つの異なる公開タスクは、メイン-公開しパブリッシュ統合をして設定することができます。

あなたは両方の長所を得るその方法:あなたの仲介ステージング領域を取得し、あなたはアイビーの強力なコントロールの内部ですべてを手にします。

+0

応答をありがとう。中間ビルドを構築している間に 'common'を公開したくない私の理由は、私がメインリポジトリにivysvnを使用しているからです。公開された成果物は別のsvnリポジトリにチェックインされます。私はcommon-latest.integration.jarが継続的にコミットされることを望んでいません。私はあなたの複数のリポジトリの提案の音が好きです。 common-latest.integration.jarがローカルのディレクトリリポジトリから解決されている間に、メインのivysvnリポジトリのサードパーティの成果物がそこから解決されるように、両方のリポジトリを使用して解決できるでしょうか? – zorgbargle

関連する問題