1

それで、私がすでにSVNをインストールしていて、ANT/Ivyをローカルにインストールしていると仮定しましょう。

ivy設定の「共有」部分がサーバー上のある種の共有を指すようにしたい。これをどのように設定する必要がありますか?

ivy jarを掘り下げて、ivysettingsファイルを取り出し、共有リポジトリを変更する必要があることはわかっています。

したがって、イントラネットのMyServer.intranet.netにサーバーがあり、チームのフォルダーが/ path / to / NetAdminの下にあると仮定します(したがって、フルパスはMyServer.intranet.net/path/to/NetAdminになります)。これを共有ライブラリのチームリポジトリとして設定しますか?それを指定するだけで、プロジェクトをパッケージ化すると、そこに依存関係が書き込まれますか?

ありがとう

4

2 に答える 2

2

ここで私がしたこと:

  • と呼ばれるSubversionプロジェクトを作成しましたivy.dir
  • このivy.dirプロジェクトでは、最新のivy.jarを使用しています。
  • ivy.dirには、環境の設定がありivysettings.xmlます。たとえば、独自のjarにはローカルのArtifactoryMavenリポジトリを使用します。プロジェクトのivysettings.xmlivy.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.xmlbuild.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.dirivy.tasks.xmlファイルを使って他のタスクをインストールすることができます。たとえば、各プロジェクトは、 Findbugs PMD、CPD(PMDプロジェクトの一部であるCheckstyle )を介して実行する必要があり、テストカバレッジにはJaCoCoを使用するます。

これらの各プロジェクトは、jarファイルと、<taskdef>タスク定義をAntにプルするためのファイルで構成されています。そして、これらのタスクもどのように使用しますか?これらは、標準のAntモデルでは定義されていません。開発者はそれらの使い方を知りません。

これらのjarをivy.dirプロジェクトに追加し、それらのタスク定義をすべてivy.tasks.xmlファイルにインストールしました。<macrodef>また、これらのタスクのほとんどで使いやすいと定義したので、開発者はそれらを簡単に使用できます。実際、楽しみのために古いAnt-Contribタスクも含めました。

これで、ivy.dirプロジェクトに追加すると、これらの追加タスクがすべて実行され、マシンにインストールするものは何もありません。

于 2012-09-13T01:54:05.183 に答える
1

ツタの瓶を変更する必要はありません。ivysettingsファイルにファイルシステムリゾルバーを作成し、これに公開するだけです。次に例を示します。

ivyは非常に柔軟性があり、ファイルをホストするためのほぼすべてのメカニズムをサポートできることがわかります。

個人的には、 NexusArtifactoryなどのMavenリポジトリマネージャーをインストールし、これを使用してビルドの依存関係とビルド出力の両方をホストすることを検討します。長期的には、特にJava開発を行っている場合は、はるかに簡単です。

于 2012-09-12T21:19:34.463 に答える