0

Ivy を使用して依存関係を管理していますが、提供された jar に問題があります

これは私のivy.xmlファイルです

<configurations>
    <conf name="local" visibility="private" />
    <conf name="compile" description="used for building" />
    <conf name="test" extends="compile" description="used for testing" />
    <conf name="runtime" description="used for running" />
    <conf name="master" description="used for publishing" />
    <conf name="default" extends="master, runtime" />
</configurations>
<dependencies>
    <dependency org="xalan" name="xalan" rev="2.7.1"/>
    <dependency org="org.w3c.css" name="sac" rev="1.3"/>
    <dependency org="com.lowagie" name="itext" rev="2.0.8">
            <exclude org="bouncycastle"/>
    </dependency>
<!--Provided-->
<dependency org="javax.ejb" name="ejb-api" rev="3.0" conf="compile"/>
<dependency org="javax.jms" name="jms-api" rev="1.1-rev-1" conf="compile"/>
</dependencies>

EJB と jms はコンテナーによって提供されます。

取得した後

---------------------------------------------------------------------
|                  |            modules            ||   artifacts   |
|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
|      compile     |   8   |   0   |   0   |   0   ||   6   |   0   |
|      default     |   6   |   0   |   0   |   0   ||   6   |   0   |
---------------------------------------------------------------------

したがって、Ivyは依存関係をうまく処理していますが、これを実行すると

<ivy:cachepath pathid="normal.classpath" />
<pathconvert property="expanded.normal.classpath" refid="normal.classpath"/>
<echo message="${expanded.normal.classpath}" file="normal.classpath.txt"/>

<ivy:cachepath conf="compile" pathid="compile.classpath" />
<pathconvert property="expanded.compile.classpath" refid="compile.classpath"/>
<echo message="${expanded.compile.classpath}" file="compile.classpath.txt"/>

両方のクラスパスは同じです。誰でも理由を知っていますか?

4

2 に答える 2

0

構成の数を減らし、各依存関係に明示的なマッピングがあることを確認することをお勧めします。

<ivy-module version="2.0">
  <info organisation="com.myspotontheweb" module="demo"/>
  <configurations>
    <conf name="compile" description="used for building"/>
    <conf name="runtime" description="used for running" extends="compile"/>
    <conf name="test"    description="used for testing" extends="runtime"/>
  </configurations>
  <dependencies>
    <!-- compile dependencies -->
    <dependency org="javax.ejb" name="ejb-api" rev="3.0" conf="compile->default"/>
    <dependency org="javax.jms" name="jms-api" rev="1.1-rev-1" conf="compile->default"/>

    <!-- runtime dependencies -->
    <dependency org="xalan" name="xalan" rev="2.7.1" conf="runtime->default"/>
    <dependency org="org.w3c.css" name="sac" rev="1.3" conf="runtime->default"/>
    <dependency org="com.lowagie" name="itext" rev="2.0.8" conf="runtime->default">
      <exclude org="bouncycastle"/>
    </dependency>
  </dependencies>
</ivy-module>

これにより、次の出力が生成されます。

---------------------------------------------------------------------
|                  |            modules            ||   artifacts   |
|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
|      compile     |   2   |   2   |   2   |   0   ||   2   |   2   |
|      runtime     |   7   |   7   |   7   |   0   ||   7   |   7   |
|       test       |   7   |   7   |   7   |   0   ||   7   |   7   |
---------------------------------------------------------------------

構成をコンパイルするときに 2 つの jar しかないこと (予想どおり) と、テスト構成が実行時と同じであること (一方が他方を拡張しているためと予想される) を示します。ANT ビルド ビルドで、これら 3 つの異なるクラスパス以上が必要になることはめったにありません。

追加

あなたのレポートで、何もダウンロードされていないことに気付きました。cleancacheタスクは、定期的に実行して、ビルドが最新であることを確認するのに便利です。

レポートivy は、推移的な依存関係を正しく理解するためにも非常に役立ちます。

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

    <target name="resolve" description="Use ivy to resolve classpaths">
        <ivy:resolve/>

        <ivy:report todir='build/ivy' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
    </target>

    <target name="clean">
        <delete dir="build"/>
    </target>

    <target name="clean-all" depends="clean">
        <ivy:cleancache/>
    </target>

</project>
于 2013-05-15T21:32:55.097 に答える