【问题标题】:How am I supposed to know what configurations are available in an Ivy dependency?我应该如何知道 Ivy 依赖项中可用的配置?
【发布时间】:2012-02-24 12:21:37
【问题描述】:

我如何知道哪些配置可用于特定依赖项?

我了解这些是常见的配置:default、master、compile、provided、test、system、sources、javadoc、optional、runtime

但有些依赖项没有定义所有这些,而其他依赖项定义了其他自定义配置。我没有在 springsource 或 maven repo 上看到任何关于可用配置的提及。

下面是我令人尴尬的 ivy.xml 文件。请注意,我将 org.springframework.spring-library conf 定义为“运行时”。这失败了,因为 org.springframework.spring-library 没有“运行时”配置。

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="com.myapp" module="MyAppName" revision="1.0"/>
    <configurations>
        <conf name="compile" visibility="public" description="Dependencies needed for compile"/>
        <conf name="runtime" visibility="public" extends="compile" description="Dependencies needed for runtime"/>
        <conf name="test" visibility="private" description="Test dependencies"/>
    </configurations>
    <dependencies>
        <dependency org="org.springframework" name="org.springframework.spring-library" rev="3.1.0.RELEASE" conf="runtime"/>
        <dependency org="org.springframework.security" name="spring-security-web" rev="3.1.0.RELEASE" transitive="false" conf="*"/>
        <dependency org="org.springframework.security" name="spring-security-config" rev="3.1.0.RELEASE" transitive="false" conf="*"/>
        <dependency org="org.springframework.security" name="spring-security-core" rev="3.1.0.RELEASE" transitive="false" conf="*"/>
        <dependency org="org.codehaus.jackson" name="com.springsource.org.codehaus.jackson" rev="1.4.3" conf="runtime->*"/>
        <dependency org="org.codehaus.jackson" name="com.springsource.org.codehaus.jackson.mapper" rev="1.4.3" conf="runtime->*"/>
        <dependency org="org.apache.httpcomponents" name="com.springsource.org.apache.httpcomponents.httpclient" rev="4.1.1" conf="runtime->*" />
        <dependency org="org.aspectj" name="org.aspectj-library" rev="1.6.5.RELEASE" conf="runtime,compile->runtime(default)"/>
        <dependency org="net.sourceforge.cglib" name="com.springsource.net.sf.cglib" rev="2.2.0" conf="compile->*"/>
        <dependency org="log4j" name="log4j" rev="1.2.14" conf="runtime->*"/>
        <dependency org="joda-time" name="joda-time" rev="2.0" conf="runtime,compile->runtime(default)"/>
        <exclude type="license" ext="txt"/>
        <exclude type="notice" ext="txt"/>
        <exclude org="javax.servlet" conf="runtime"/>
        <exclude org="javax.el" conf="runtime"/>
        <exclude org="javax.faces" conf="runtime"/>
        <exclude org="javax.portlet" conf="runtime"/>
        <exclude org="javax.xml.rpc" conf="runtime"/>
        <exclude org="javax.xml.soap" conf="runtime"/>
        <exclude org="javax.xml.ws" conf="runtime"/>
        <exclude org="commons-logging" conf="runtime"/>
    </dependencies>
</ivy-module>    

【问题讨论】:

    标签: spring maven ant ivy


    【解决方案1】:

    org.springframework.spring-library 似乎确实具有runtime 配置。具体来说,spring-library 的配置是:

    <configurations>
        <conf name="compile" visibility="public" extends="aspects" description="Maven compile dependencies"/>
        <conf name="optional" visibility="public" extends="compile" description="Maven optional dependencies"/>
        <conf name="provided" visibility="public" description="Maven provided dependencies"/>
        <conf name="dm-server-provided" visibility="public" description="Maven provided dependencies that already exist in the platform"/>
        <conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/>
        <conf name="test" visibility="private" description="Test dependencies"/>
        <conf name="aspects" visibility="private" description="Aspects to be woven"/>
        <conf name="external" visibility="private" description="External candidates to be woven"/>
        <conf name="additional" visibility="private" description="Additional candidates to be included in the PAR"/>
    </configurations>
    

    为了获得此列表,我添加了以下依赖项并执行了解析(注意:没有conf 指定)

    <dependency org="org.springframework" name="org.springframework.spring-library" rev="3.1.0.RELEASE"/>
    

    然后我查看了缓存中org.springframework.spring-library 的常春藤文件(通常在${user.home}/.ivy2/cache/org.springframework/org.springframework.spring-library/ivy-3.1.0.RELEASE.xml 找到)。

    可能有一种更简单的方法来获取配置列表,但上面的方法对我有用。

    由于 SpringSource EBR 提供了 ivy 文件,您可以直接从 http://repository.springsource.com/ivy/libraries/release/org.springframework/org.springframework.spring-library/3.1.0.RELEASE/ivy-3.1.0.RELEASE.xml,但 IMO 找出正确的 url 比上面使用的技术更努力。

    【讨论】:

    • 那么人们是否对他们拥有的每个依赖项都这样做?这似乎很荒谬(在常春藤方面)。如果知道哪些配置可用于依赖项非常重要,那么为什么没有一种简单有效的方法来获取这些数据呢?
    • 可浏览的 Ivy 存储库要容易得多。例如Ivy Roundup repo 使获取此信息变得非常容易。例如,ivyroundup.googlecode.com/svn/trunk/repo/modules/…
    • 看起来 ivyroundup 没有 spring 3.1.0。虽然我认为配置可能相同,但这正是我对 ivy 的挫败感。
    • 不,它没有。我以 Ivy Roundup 为例,说明可浏览的 Ivy 存储库如何提供配置信息。不幸的是,大多数公共存储库并没有以易于访问的方式提供这些信息,这就是我使用上面的解析和检查缓存方法的原因,因为它适用于所有方面。
    猜你喜欢
    • 2016-03-15
    • 2023-03-25
    • 2017-02-08
    • 2023-03-07
    • 2016-02-07
    • 2015-11-05
    • 2012-08-29
    • 1970-01-01
    • 2015-03-20
    相关资源
    最近更新 更多