純粋な ant から ant+ivy に移行した後、プロジェクトのビルド時間は 7 秒から 26 秒に増加しましたが、インクリメンタル リビルドは 1 秒未満 (ほぼ瞬時) ではなく 7 秒になりました。
この時間のほとんどは、ivy:resolve
を使用してクラスパスを生成する必要があることに費やされているようivy:cachepath
です。
これを高速化する方法、特に再構築する方法はありますか?
もう 1 つのオプションは、ネットワーク ベースの解決をオフにして、ivy にキャッシュされたデータを強制的に使用させることです。
詳細については、次の回答を参照してください。
を使用してい<ivy:cleancache>
ますか? これが、再構築が非常に短いのに、最初の構築が非常に長い理由です。
Ivy は、Ivy なしで Ant を使用するよりも遅くなります。Ivy は、開始する前に、指定したすべての jar とすべての依存関係を Ivy キャッシュ (デフォルトでは$HOME/.ivy2/cache
Unix/Mac/Linux および%USERPROFILE%\.ivy2\cache
Windows 上にあります) にダウンロードする必要があります。4 つまたは 5 つの jar を指定することもできますが、これらはさらに依存する可能性のある他のものに依存する可能性があります。
jar の Ivy ダウンロードを高速化する方法は実際にはありません1が、jar がダウンロードされると、新しいプロジェクトを実行するたびに、または実行するたびに Ivy キャッシュを常にクリーンアップする理由は実際にはありません。きれい。
できることは、クリーンをセットアップすることです。指定しない限り、Ivy キャッシュのクリーニングを回避できます。
<taskdef uri="http://ant.apache.org/ivy"
resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<fileset dir="${ivy.dir}">
<include name="ivy*.jar"/>
</fileset>
</classpath>
</taskdef>
<property name="ivy.cleancache" value="false"/>
<target name="clean">
<if>
<istrue value="${ivy.cleancache}"/>
<then>
<ivy:cleancache/>
</then>
<if>
<delete dir="${target.dir}"/>
</target>
この方法では、実行ant clean
時に Ivy キャッシュが毎回スクラブされることはなく、何度でも再利用できます。Ivy キャッシュを消去する場合は、次のようにする必要があります。
ant -Divy.cleancache=true clean
はい、これは を使用してantcontrib
います。私は特別な Ivy ディレクトリ構成を使用して、すべてのユーザー向けに Ivy を構成し、その間に、ant-contrib の定義と、Findbugs、PMD、およびその他の便利なツールを含めます。
ただし、Ant 1.9 ではこれを行う必要がない可能性があります。
<property name="ivy.cleancache" value="false"/>
<target name="clean">
<ivy:cleancache if:true="ivy.cleancache/>
<delete dir="${target.dir}"/>
</target>
私はこれを試していませんが、動作する場合は、antcontrib を使用する必要はありません。もちろん、これもできます:
<target name="ivy.cleancache"
if="ivy.cleancache">
<ivy:cleancache/>
</target>
<target name="clean"
depends="ivy.cleancache">
<delete dir="${target.dir}"
</target>
次に、次を指定できます。
$ ant -Divy.cleancache clean
Ivy キャッシュを消去し、Ivy キャッシュをant clean
消去せずにビルドを消去するだけです。
1. Nexus や Artifactory などの独自の Maven リポジトリを使用すると、jar のダウンロードを高速化できる場合があります。これらには、ダウンロードしたサードパーティの jar をローカルに保存する独自のキャッシュがあります。これは、これらのサードパーティの jar を見つけるためにネットワークの外に出るよりも少し高速ですが、それでもすべてをダウンロードする必要があります。26 秒ではなく、20 秒しかかからないかもしれません。
これを試してください-Divy.checkmodified=false
/-Divy.skip=true