2
<ivy-module version="2.0">
    <info organisation="com.travelclick" module="CoreWebServices" revision="4.1"/>
    <configurations defaultconfmapping="default">
        <conf name="runtime" visibility="public"/>
        <conf name="default" visibility="public"  extends="runtime"/>
    </configurations>

    <dependencies>
        <dependency org="com.travelclick"
            name="commons-all"
            rev="4.1"
            conf="default->default"/>

        <dependency org="com.sun.messaging.mq"
            name="jms"
            rev="4.5.2"
            conf="default->default"/>

        <dependency org="org.jboss.common"
            name="servlet-api"
            rev="4.2"
            conf="default->default"/>

        <dependency org="com.fiorano"
            name="framework"
            rev="2.0"
            conf="default->default"/>

        <dependency org="com.fiorano"
            name="fmq-client"
            rev="9.3.0"
            conf="default->default"/>

        <dependency org="commons-codec"
            name="commons-codec"
            rev="1.3"
            conf="default->default"/>

        <dependency org="commons-httpclient"
            name="commons-httpclient"
            rev="3.1"
            conf="default->default"/>

        <dependency org="commons-lang"
            name="commons-lang"
            rev="2.2"
            conf="default->default"/>

        <dependency org="commons-pool"
            name="commons-pool"
            rev="1.4"
            conf="default->default"/>
    </dependencies>
</ivy-module>

请注意,所有依赖项都配置为default->default.

在我的build.xml中,我有以下陈述:

 <ivy:resolve conf="default"/>
 <ivy:cachepath pathid="all.libs" conf="default"/>

注意我使用的是默认配置。

我使用all.libs路径将库下载到我正在构建的战争中。

我在战争中得到了以下库,这就是我想要的:

commons-all-4.1.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-lang-2.2.jar
commons-logging-1.0.4.jar
commons-pool-1.4.jar
fmq-client-9.3.0.jar
framework-2.0.jar
jms-4.5.2.jar
servlet-api-4.2.jar

现在,我将删除配置信息。这ivy.xml与删除的<configurations>部分和所有conf=default->default删除的部分相同:

<ivy-module version="2.0">
    <info organisation="com.travelclick" module="CoreWebServices" revision="4.1"/>

    <dependencies>
        <dependency org="com.travelclick"
            name="commons-all"
            rev="4.1"/>

        <dependency org="com.sun.messaging.mq"
            name="jms"
            rev="4.5.2"/>

        <dependency org="org.jboss.common"
            name="servlet-api"
            rev="4.2"/>

        <dependency org="com.fiorano"
            name="framework"
            rev="2.0"/>

        <dependency org="com.fiorano"
            name="fmq-client"
            rev="9.3.0"/>

        <dependency org="commons-codec"
            name="commons-codec"
            rev="1.3"/>

        <dependency org="commons-httpclient"
            name="commons-httpclient"
            rev="3.1"/>

        <dependency org="commons-lang"
            name="commons-lang"
            rev="2.2"/>

        <dependency org="commons-pool"
            name="commons-pool"
            rev="1.4"/>
    </dependencies>
</ivy-module>

当然,我还必须更改 bybuild.xml以删除对默认配置的引用:

 <ivy:resolve/>
 <ivy:cachepath pathid="all.libs"/>

但是,现在看看包含的内容:

commons-all-4.1.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-lang-2.2.jar
commons-logging-1.0.4.jar
commons-pool-1.4.jar
fmq-client-9.3.0.jar
framework-2.0.jar
jms-4.5.2.jar
servlet-api-4.2.jar

commons-httpclient-3.1-sources.jar
commons-codec-1.3-javadoc.jar
commons-codec-1.3-sources.jar
commons-lang-2.2-javadoc.jar
commons-lang-2.2-sources.jar
commons-pool-1.4-sources.jar

为什么,当我将所有内容设置为default时,只下载了实际的 jars 而不是 source 和 javadoc jars。然而,当我删除所有配置时,javadoc 和源jar也下载了。

其实Maven仓库中各种jar的配置存放在哪里呢?我可以在 Maven 存储库中看到 javadoc 和源代码,但我没有看到任何关于各种配置的信息。Ivy 如何知道是否包含源代码javadoc jar?

4

1 回答 1

3

ivy中没有标准的默认配置。每个 ivy 文件在该部分中定义了自己的一组confs <configuration> ..</configuration>

在您的第一个示例中,您定义default并将其映射到default工件的配置。这些依赖项是 maven 工件,并且 ivy 将 maven 范围映射到default(Ivy 读取 maven pom 文件并在缓存中为其创建一个 ivy 文件)。所以基本上你很幸运,defaultconf 存在于配置的 ivy 文件中。

confdefault是一个映射的 maven 范围,并不作为confivy 中的预定义标准存在。

在您的第二个示例中,您省略了conf="default->default"这等效于 conf="*->*"并且意味着:将依赖项中的所有内容映射conf到此常春藤文件中的每个内容。

这个问题回答了 ivy 如何将 maven 范围映射到 ivy 配置

简而言之:

  • default映射到仅引用 jar 的 maven 范围默认值
  • 声明 no scopes 映射到 ivy 配置*,它引用了所有可用的配置,因此也引用了所有可用的 Maven 工件。
于 2012-07-16T19:50:40.547 回答