3

プロジェクトにIvyを使用していますが、jarリポジトリとしてArtifactoryを使用しています。私は実際に<ivy:makepom>Antタスクを使用してMavenを作成しているpom.xmlので、Mavenのdeploy:deployワークフローを介してjarとwarをMavenリポジトリにデプロイできます。

common-all.jar私は、コンパイルに約30個のjarを必要とするという大きなjarを作成します。私は約10個のjarを指定し、Ivyは依存関係をプルダウンします。コンパイルプロセスの一部として、log4jjarといくつかのJBossjarを指定します。もちろん、これらのjarファイルは私たちの環境によって提供されます。

この瓶で、私もたくさんの戦争をしました。依存関係の一部としてを指定するcommon-all.jarと、必要な30個のjarcommon-all.jarもプルダウンされます。すべてが順調です。

問題は、私が戦争を構築するときです。戦争の一部としてJBossjarまたはlog4jjarを含めたくありません。これらは環境によって提供されます。それらをpom.xmlファイルで提供されているものとしてマークしました。私が構築するときcommon-all.jar

さて、問題は、戦争のコードをコンパイルするときにこれらが必要であることをどのように指定するかですが、戦争自体には含めたくありません。

これが私のivy.xmlファイルのサンプルです。

common-all.jarコンパイルに特定のjarが必要であることを指定するにはどうすればよいですか。ただし、戦争でビルドする場合、これらのjarのすべてが必要になるわけではありません。

<ivy-module version="1.0">
    <info
        organisation="com.travelclick"
        module="TC-AppUtil"
        revision="4.1"
        status="release"/>

    <configurations>
        <conf name="default" visibility="public"
            description="The single built artifact. Nothing else"/>

        <conf name="compile" visibility="public"
            description="The master module and transitive dependencies"/>

        <conf name="provided" visibility="public"
            description="Needed for compile. Will be provided outside or war"/>

        <conf name="runtime" visibility="public"
            description="Not required for compile, but for runtime"
            extends="compile"/>

        <conf name="default" visibility="public"
            description="The default configuration"
            extends="runtime"/>

        <conf name="test" visibility="private"
            description="Required for testing" extends="runtime"/>

    </configurations>
    <dependencies>

        <!-- Normal Compile Dependencies -->

        <dependency org="ximpleware" name="vtd-xml"
            rev="2.5" conf="compile->default"/>

        <dependency org="com.travelclick" name="common-all"
            rev="4.1" conf="compile->compile,runtime"/>

        <!-- Testing -->

        <dependency org="junit"             name="junit"
            rev="4.10"                      conf="test->default"/>
    </dependencies>
</ivy-module>
4

1 に答える 1

3

common-all依存関係を宣言する方法を示していないので、次の例を作成します。

<dependency org="mygroup" name="common-all" rev="1.0" conf="compile->default;provided"/>

魔法は構成マッピングです。

  • ローカルの「コンパイル」構成は、共通モジュールとそのデフォルト(コンパイル)スコープの依存関係にマップされ、
  • ローカルの「提供された」構成は、共通モジュールとその提供されたスコープの依存関係にマップされます。

ビルドファイル内では、構成は次のように使用されます。

<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="resolve">
        <ivy:resolve/>
        <ivy:cachepath pathid="compile.path"  conf="compile"/>
        <ivy:cachepath pathid="provided.path" conf="provided"/>
    </target>

    <target name="compile" depends="resolve">
        <javac ...
            <classpath>
                <path refid="compile.path"/>
                <path refid="provide.path"/>
            </classpath>
        </javac>

    </target>

    <target name="build" depends="compile">
        <ivy:retrieve pattern="build/lib/[artifact].[ext]" conf="runtime"/>

        <war ...
            <lib dir="build/lib"/>
        </war>
    </target>

    <target name="clean">
        <delete dir="build"/>
        <ivy:cleancache/>
    </target>

</project>
于 2012-07-22T21:53:41.200 に答える