2011-12-20 5 views
6

私が管理しているMavenプロジェクトをApache-Ant/Ivyに切り替えることを検討しています。ビルドプロセスをより詳細に制御する必要があり、Mavenに非常に不満を感じています。 Mavenの素晴らしさに関するコメントはありません。私の質問はアイビーについてです。プロジェクトビルド用のAnt/Ivy

変更を最小限に抑えて後で他のプロジェクトで使用できる「標準の」Antビルドテンプレートを設定したいと思います。

パブリックMavenリポジトリ(商用ライブラリ、サンライブラリ、プロプライエタリライブラリなど)では利用できないサードパーティライブラリを配置できる中央の「エンタープライズ」リポジトリを設定します。このエンタープライズ・リポジトリーは、ローカルLAN上で使用できますが、オフィス外からは入手できません。

各開発者は~/.ivy/repositoryにプライベートレポジトリを持ちます。私はAntビルドで、このプライベート・リポジトリをエンタープライズ・リポジトリからのライブラリの変更されたバージョンで自動的に更新したいと考えています。

~/.ivy/antでは、個々のプロジェクトbuild.xmlファイルに「標準」モジュールを含め、Ant 1.8のincludeタスクを使用する予定です。これらのモジュールは、scala-compile-2.9.1.xml,clojure-compile-1.3.xmlなど、ScalaとClojureのバージョンが異なるScalaClojureのコンパイルターゲットを提供します。ビルドモジュールはエンタープライズリポジトリで利用できるため、プライベートリポジトリで自動的に更新される必要があります彼らは変わる。

各プロジェクトには、標準のMavenディレクトリ構造に従います:${project}/src/main/java${project}/target/classesなど

過去には、私はアイビーを使用してみましたが、Antビルドファイルは、テンプレートの構築のための非常に大規模な(> 500行に持っファイル)と管理/編集が困難です。私は~/.ivy/antディレクトリ内に独自のビルドモジュールで標準的なターゲットを置くことで、コードが肥大化するのを避けることができると期待しています。

これはできますか?ベースから離れていますか? Ivyで見つかる唯一のドキュメントは、Apache Webサイト(http://ant.apache.org/ivy)です。書籍を含むその他の資料はありますか?

+0

私はあなたのライブラリのプライベートリポジトリを必要とすること、とは思いません。 アイビーは、依存関係を解決するときに、それが最新の状態に維持します〜/ .ivy2、中に独自の[キャッシュ](https://ant.apache.org/ivy/history/latest-milestone/concept.html#cache)を管理します。 – oers

答えて

2

テンプレートビルドファイルをインクルード可能なヘルパーファイルに分割することについて、わかりやすい考え方。個人的に、私はantからの本当に大きなプロジェクトを切り換えています(依存関係の管理は一切ありません - ftpからファイルをコピーするだけです)。だから、私はこのようにしました。私はマイルストーンの目標を持つファイルを用意しています。つまり、すぐにコンパイルできる、コンパイルされた、すぐにアーカイブできる、アーカイブされているなどです。私はあなたが考えを持っていると思う。私はこのすべてのターゲットの依存関係を設定しました(アリの面での依存関係、私は間違っています)。このようにして、コンパイルされたコンパイル済みファイルは、このような初期化済みファイルに依存します。このターゲットにはボディがありません。マルチモジュールプロジェクトのすべてのモジュールのすべてのビルドファイルに含まれています。ビルドの状態を維持するためのこの目標の唯一の目的は、このインポートのものが面倒になり、どのターゲットがオーバーライドされたのか、そしてこのターゲットがいつ実行されるのかを知るのは難しいことです。しかし、このファイルでは、すべての賢明なマイルストーンで簡単にvyビルドの状態を変更することができます。私は1つのモジュールでexteran exeでヘルプファイルをコンパイルしたい。問題はありません。このプロジェクトではこれだけです。アーカイブの準備はヘルプのコンパイルの対象に依存します。そして、このマイルストーンの目標が含まれている - 私はそれらの一部だけを無効にすることができます - 他のすべてのものは、プロジェクトを構築する望ましい方法をpresereするでしょう。

私の戦略の別の部分 - ミックスインはファイルをビルドする - すべての特定の領域です。だから、私はツタのためのファイルを持っています。そこで私は、初期化、解決、公開などを行いました。私がivyを使用したいとき - 私はこのファイルをインクルードし、私のマイルストーンターゲットを通して拒否を管理するだけです。ビルドが典型的な場合、私はこのファイルのみを含み、コンベンションオーバーコンフィグレーション機能を持っています。すべてすぐに使用できます。どうやって??他のミックスインと組み合わせるだけです。ミックスインには他のミックスインが含まれている場合があります。ですから、各ミックスインは私のビルド戦略の再利用可能な部分です。 OOPからのもの - 単一関連のユニット。あなたのケースでは、scalaのものに特有のターゲットを持つscala mixinです。

それから私は、代表者の子供は、共通のビルド活動を投影していることdelegate.xmlを持っています。私はdist、all、testなど、マルチモジュールプロジェクトに必要なものを持っています。ビルドの順序は、ant-ivyタスクビルドリストで評価されます。また

あり、いくつかの他のファイル - これは、このBIGと非常に保守的なプロジェクトで再利用可能とmaintanableビルドを持っている私を助け戦略的に基本的なファイルです。だから、もしあなたが細部に興味があるのなら、恥ずかしがらずに私に連絡してください。私はあなたを助けることを非常にうれしく思います。なぜなら、ivy文書は本当に複雑で不完全だからです。

EDIT:ブックについて - アクションでAntがあなたを助けることが、私はこの本からいくつかのアイデアを取って、私は本当に非常に誰もが読んで、それをお勧めします。また、あなたはアイビーのものを見つけることができます。そしてivy docsについて - 申し訳ありませんが、それはすべて利用可能です。私はこの面倒なツタ+アリとのトラブルにあったときには - 私は民間のブログにいくつかの興味深い記事を見つけました。だから...何らかの形でギャップを埋めるかもしれない。

関連する問題