ここで私がしたこと:
- と呼ばれるSubversionプロジェクトを作成しました
ivy.dir
。
- この
ivy.dir
プロジェクトでは、最新のivy.jarを使用しています。
ivy.dir
には、環境の設定がありivysettings.xml
ます。たとえば、独自のjarにはローカルのArtifactoryMavenリポジトリを使用します。プロジェクトのivysettings.xml
はivy.dir
それを指しています。
- というファイルを作成しました
ivy.tasks.xml
。これはAntビルドファイルです。
このivy.tasks.xml
ように見えます:
<project name="Ivy.Tasks"
xmlns:ivy="http://ant.apache.org/ivy"
xmlns:jacoco="antlib:org.jacoco.ant">
<property environment="env"/>
<!-- Add Ivy Tasks -->
<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>
<ivy:settings file="${ivy.dir}/ivysettings.xml"/>
</project>
私は自分のアイビー設定を持っていることに注意してください、ありがとう。ivy.jar
私は(誰もが私のivy.jar
ファイルを使用するので、私はそうすることができましたが)の1つを混乱させる必要はありませんでした。私ivysettings.xml
はこのように見えます:
<ivysettings>
<!-- I'll explain this part below -->
<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"/>
<!-- Just the standard stuff you find in the `ivysettings.xml in the ivy.jar -->
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/> <!-- This one is different -->
<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>
大きな変更はivysetting-public.xml
ファイルです:
<ivysettings>
<resolvers>
<ibiblio name="public"
m2compatible="true"
checkmodified="true"
root="http://repos.vegicorp.com/artifactory/libs-release" />
</resolvers>
</ivysettings>
これは、私のローカルMavenリポジトリ(Artifactoryサーバー)を指しています。
さて、開発者がIvyを使用するには、次のことを行う必要があります。
- Subversionのプロジェクトのルートに、を追加し
svn:external
ます。これは、私のプロジェクトをSubversionプロジェクトに取り込むsvn:external
ために使用されます。ivy.dir
- build.xml内
build.xml
定義内のそれらにIvy名前空間定義を追加し<project>
ます。
- プロパティ
ivy.dir
を`${basedir}/ivy.dirに設定します。
- タスクを使用して、ファイル
<import>
にインポート${ivy.dir}/ivy.tasks.xml
しbuild.xml
ます。
このようなもの:
<project name="post-a-matic" default="package" basedir="."
xmlns:ivy="http://ant.apache.org/ivy">
<property name="ivy.dir" value="${basedir}/ivy.dir"/>
<import file="${ivy.dir}/ivy.tasks.xml"/>
<!-- A whole bundle of properties are set -->
<target name="clean">
<delete dir="${target.dir}"/>
<ivy:cleancache/> <!-- Look: They have access to Ivy! -->
</target>
<target name="-resolve">
<ivy:resolve/>
</target>
<target name="compile"
depends="-resolve">
<ivy:cachpath
pathid="main.classpath"
conf="compile,provided"/>
<!-- Boy that's easy! -->
<javac srcdir="${main.srcdir}"
destdir="${main.destdir}"
classpathref="main.classpath"/>
</target>
<!-- On and on -->
これは多くの問題を解決します:
- を更新する
ivy.settings
と、全員が更新された設定になります。Jenkinsを使用していて、ビルドごとにJenkinsにツタのキャッシュをクリーンアップしてもらいたかったので、これは私たちにとって非常に重要でした。おっと!これにより、同時に実行されているビルドのツタのキャッシュがクリーンアップされます。ivysettings.xml
Jenkinsビルドエグゼキュータごとに異なるIvyキャッシュを定義するようにファイルを変更することで、問題を解決しました。Jenkinsサーバーの1つに、、などと呼ばれるIvyキャッシュがあります$HOME/.ivy2/cache-0
。$HOME/.ivy2/cache-1
各エグゼキュータは、他のエグゼキュータに影響を与えることなく、自身のIvyキャッシュを削除できます。その間、ユーザーはただ持っているでしょう$HOME/.ivy2/cache-0
。
- 新しい瓶が出てきたときにアイビーを更新することもできます。Ivy jarファイルを更新すると、全員が最新の状態になります。
- もちろん大きな問題は、プロジェクトがチェックアウトされたときにIvyが自分自身をインストールすることです。
- そして、特別なボーナス:あなたはあなた
ivy.dir
とivy.tasks.xml
ファイルを使って他のタスクをインストールすることができます。たとえば、各プロジェクトは、 Findbugs、 PMD、CPD(PMDプロジェクトの一部であるCheckstyle )を介して実行する必要があり、テストカバレッジにはJaCoCoを使用するます。
これらの各プロジェクトは、jarファイルと、<taskdef>
タスク定義をAntにプルするためのファイルで構成されています。そして、これらのタスクもどのように使用しますか?これらは、標準のAntモデルでは定義されていません。開発者はそれらの使い方を知りません。
これらのjarをivy.dir
プロジェクトに追加し、それらのタスク定義をすべてivy.tasks.xml
ファイルにインストールしました。<macrodef>
また、これらのタスクのほとんどで使いやすいと定義したので、開発者はそれらを簡単に使用できます。実際、楽しみのために古いAnt-Contribタスクも含めました。
これで、ivy.dir
プロジェクトに追加すると、これらの追加タスクがすべて実行され、マシンにインストールするものは何もありません。