ここで私がしたこと:
- と呼ばれる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.xmlJenkinsビルドエグゼキュータごとに異なる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プロジェクトに追加すると、これらの追加タスクがすべて実行され、マシンにインストールするものは何もありません。