2012-11-28 13 views
5

他の人が自分のプロジェクトにsvn:externalsプロパティを使って含むマスターIvyプロジェクトを持っています。このプロジェクトには、Ivy jar、プロジェクトに接続するデフォルトのivysettings.xmlファイル、jarファイルの構築方法を標準化するAntマクロが含まれています(たとえば、ユーザは<jar.macro><jar>を使用します)。<jar.macro>同じパラメータを使用しますが、pom.xmlをJARファイルに自動的に埋め込み、Jenkinsビルド情報をManifestに追加します)。Ivy:<ivy:settings>対<ivy:configure>

また、Jenkinsを継続的インテグレーションシステムとして使用しています。私がしたいことの1つは、ビルドごとにIvyキャッシュを消去することです。そのため、キャッシュの問題によりjarの問題は発生しません。これを行うために、私は私のセットアップivysettings.xmlファイルごとジェンキンスキュータに別々のキャッシュを定義しました:

<ivysettings> 
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/> 
    <caches 
     defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}" 
     resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/> 
    <settings defaultResolver="default"/> 
    <include file="${ivy.dir}/ivysettings-public.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/> 
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/> 
</ivysettings> 

を私はもともとアイビーで私たちのプロジェクトを設定するには、<ivy:settings>タスクを使用していました。しかし、Jenkinsのエグゼキュータのすべてが問題を引き起こした同じIvyキャッシュを使用していました。 <ivy:settings>から<ivy:configure>に切り替わり、問題は解決しました。明らかに、<ivy:configure>は、<ivy:settings><ivy:resolve>が呼び出されるまでIvyを設定しないうちに、即座にIvyを設定し(したがって、キャッシュを正しく設定する)

Nabbleについてのメールは、<ivy:configure>については非推奨となっています(またはそうでないかもしれない)。私はアイビーのオンライン文書で何も参照していないと述べている<ivy:configure>は非難されている。

したがって、<ivy:settings><ivy:configure>を使用するのはいつですか。私の場合、ジェンキンスのエグゼキュータごとに別々のキャッシュが必要なので、<ivy:configure>を使用する必要がありましたが、<ivy:settings><ivy:configure>以上に使用する理由がありますか?そして、<ivy:configure>は推奨されていませんか?ここ

+0

優秀な質問です。私は決して "構成"タスクを使用していません。あなたが複数のivy設定ファイルを使用して、いくつかのivy解決タスクを実行できるようにするために、設定タスクがより有用であると思われます。私はめったに2回以上のアイビーの解決策を呼び出すことはほとんどないので、私の場合はタスク間に実際の機能上の違いはないと思われます: –

+0

''と ' a _settings ID_のように、両方とも複数の設定と複数の解決を使用できるようです。これは ''ドキュメントで明示的に言及していますが、どちらのタスクもこの機能をサポートしているようです。私は ''がIvy 2.xで使うデフォルトのものだと信じていますが、私の ''は ' :configure> ' –

+0

おそらく、この質問は開発者のメーリングリストに投稿されるのがベストでしょう。私が言ったように、私はめったにビルドでアイビーの解決を2回以上行うことはありません。これは、設定IDを指定する必要がない理由を説明しています。ええ、それは少しのパズルです –

答えて

4

は、私が見つけたものです:

  • <ivy:settings>は、新しいと好ま方法です。
  • <ivy:configure>は推奨されない場合があります。
  • <ivy:settings>は、<ivy:resolve>が呼び出されるまで自分のIvy設定を設定しません。<ivy:configure>は、タスクが実行されるとすぐにすべてのIvy設定を設定します。

最後の1つは私の問題です。 Jenkinsの並列ビルドが行われているので、完全にクリーンなキャッシュで各ビルドを開始するには、Jenkinsのエグゼキュータ番号に応じてカスタマイズしたキャッシュ設定を使用します。キャッシュは、cache-0cache-5と表示されています。

しかし、私が<ivy:resolve>を呼び出すまで<ivy:settings>は実行されないので、自分のカスタマイズしたキャッシュ設定は取得されません。 Ivy resolveと呼ぶ前に<ivy:cleancache>と呼んでいます。これによりビルドは共通のキャッシュを消去します。喜びが続く。 <ivy:cofnfigure>を使用するとこの問題が修正されます。

関連する問題