3
votes

How am I to know which configurations are available for a particular dependency?

I understand these are common configurations: default,master,compile,provided,test,system,sources,javadoc,optional,runtime

But some dependencies do not have all of these defined, and others define other custom configurations. I don't see any mention of the available configurations on springsource or maven repo.

Below is my embarrassingly hacked-together ivy.xml. Notice that I define org.springframework.spring-library conf as "runtime". This fails because org.springframework.spring-library does not have a "runtime" conf.

<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>    
1

1 Answers

2
votes

org.springframework.spring-library does appear to have a runtime configuration. Specifically the configurations for spring-library are:

<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>

To get this list, I added the following dependency and performed a resolve (note: no conf specfied)

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

I then had a look at the ivy file for org.springframework.spring-library in my cache (normally found at ${user.home}/.ivy2/cache/org.springframework/org.springframework.spring-library/ivy-3.1.0.RELEASE.xml).

There may be a easier way to get the list of configurations, but the above does the trick for me.

Since the SpringSource EBR provides ivy files, you can get the configurations directly from http://repository.springsource.com/ivy/libraries/release/org.springframework/org.springframework.spring-library/3.1.0.RELEASE/ivy-3.1.0.RELEASE.xml, but IMO figuring out the correct url is more effort that the technique used above.