Ignore sources jar in Ivy retrieve

后端 未结 5 1144
庸人自扰
庸人自扰 2021-02-13 18:56

I would like to retrieve ONLY the library jar when I make use of a dependency entry in my ivy.xml for Red5 (or any project for that matter). No matter how I have configured it,

相关标签:
5条回答
  • 2021-02-13 19:22

    i'm using this in build.xml to only retrieve the jars

    <ivy:retrieve type="jar"/>
    
    0 讨论(0)
  • 2021-02-13 19:26

    You could try something like this. It uses the artifact and matcher, which is valid for exclude-tags. But don't put the exclude inside the dependency (this seems to be buggy, see my comment):

        <dependencies>
          <dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE"">
          </dependency>
          <exclude org="org.springframework" name="org.springframework.core" artifact="*sources*" matcher="glob"/>
    </dependencies>
    
    0 讨论(0)
  • 2021-02-13 19:31

    Within your dependency, simply specify the individual artifacts that you'd like to retrieve by calling them out with an artifact node. Give this a try:

    <dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" transitive="false">
        <artifact name="org.springframework.core" ext="jar" />
    </dependency>
    
    0 讨论(0)
  • 2021-02-13 19:32

    I revised your ivy.xml and ivysettings.xml files.

    To suppress source files I used a default configuration mapping to avoid the need to add a "conf" attribute to each dependency.

        <configurations defaultconfmapping="default">
        ..
        ..
    

    Spring now release their software via Maven central so I revised the ivy settings file to use these instead of the old ivy bundle repositories.

    Revised ivy.xml

    <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="red5" module="server" />
    
        <configurations defaultconfmapping="default">
            <conf name="default"/>
            <conf name="java6" extends="default" description="Java 6 dependencies"/>
            <conf name="eclipse" description="Special dependencies in Eclipse"/>
            <conf name="utest" extends="eclipse" description="Unit testing dependencies"/>
        </configurations>
    
        <dependencies>
            <dependency org="javax" name="javaee-api" rev="5.1.2" />
    
            <!-- Spring --> 
            <dependency org="org.springframework" name="spring-asm" rev="3.0.5.RELEASE"/>
            <dependency org="org.springframework" name="spring-beans" rev="3.0.5.RELEASE" />
            <dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" />
            <dependency org="org.springframework" name="spring-core" rev="3.0.5.RELEASE" />
            <dependency org="org.springframework" name="spring-expression" rev="3.0.5.RELEASE" />
            <dependency org="org.springframework" name="spring-web" rev="3.0.5.RELEASE" />
    
            <!-- Logging --> 
            <dependency org="org.slf4j" name="com.springsource.slf4j.api" rev="1.6.1" transitive="false" />
            <dependency org="org.slf4j" name="com.springsource.slf4j.bridge" rev="1.6.1" transitive="false" />
    
            <dependency name="jul-to-slf4j" rev="1.6.1" />
            <dependency name="log4j-over-slf4j" rev="1.6.1" />
            <dependency name="jcl-over-slf4j" rev="1.6.1" />    
            <dependency name="logback-classic" rev="0.9.28" />
            <dependency name="logback-core" rev="0.9.28" />
    
            <!-- General --> 
            <dependency org="commons" name="commons-beanutils" rev="1.8.2" />
            <dependency org="org.apache.commons" name="com.springsource.org.apache.commons.codec" rev="1.4.0" transitive="false" />
            <dependency org="org.apache.commons" name="com.springsource.org.apache.commons.collections" rev="3.2.1" transitive="false" />
    
            <dependency org="commons" name="httpcore" rev="4.1.3" />
            <dependency org="commons" name="httpclient" rev="4.1.2" />
    
            <dependency org="commons" name="commons-lang3" rev="3.0-beta" />
            <dependency org="org.apache.commons" name="com.springsource.org.apache.commons.modeler" rev="2.0.1" transitive="false" />
    
            <dependency org="commons" name="commons-pool" rev="1.5.6" />
            <dependency name="quartz" rev="1.8.5" />
            <dependency name="ehcache" rev="2.2.0" />
    
            <!-- XML -->
            <dependency org="org.apache.xerces" name="com.springsource.org.apache.xerces" rev="2.9.1" transitive="false" />
            <dependency name="xmlrpc" rev="2.0.1" />
    
            <!-- Mina -->   
            <dependency org="mina" name="mina-integration-beans" rev="2.0.4" />
            <dependency org="mina" name="mina-integration-jmx" rev="2.0.4" />
            <dependency org="mina" name="mina-core" rev="2.0.4" />
    
            <!-- Scripting -->
            <dependency org="org.objectweb.asm" name="com.springsource.org.objectweb.asm" rev="3.2.0" transitive="false" />
            <dependency org="org.objectweb.asm" name="com.springsource.org.objectweb.asm.commons" rev="3.2.0" transitive="false" />
            <dependency org="org.antlr" name="com.springsource.org.antlr" rev="3.1.3" transitive="false" />
            <dependency org="org.codehaus.groovy" name="com.springsource.org.codehaus.groovy" rev="1.7.0" transitive="false" />
            <dependency name="jruby-complete" rev="1.1.6" />
            <dependency name="jython" rev="2.5" /> 
            <dependency org="org.mozilla.javascript" name="com.springsource.org.mozilla.javascript" rev="1.7.0.R2" transitive="false" />
            <dependency org="javax.xml.stream" name="com.springsource.javax.xml.stream" rev="1.0.1" transitive="false" />
            <dependency org="org.springframework" name="spring-context-support" rev="3.0.5.RELEASE" />
    
            <!-- Crypto -->
            <dependency name="bcprov-jdk16" rev="145" conf="java6->*" /> 
    
            <!-- MP3 -->
            <dependency name="jaudiotagger" rev="2.0.4-SNAPSHOT" />           
    
            <!-- Testing support -->
            <!-- until Eclipse updates their junit version, we have to use this -->
            <dependency org="org.junit" name="com.springsource.org.junit" rev="4.8.1" conf="eclipse->*" transitive="false" />
            <dependency name="GroboUtils" rev="5-core" conf="eclipse->*" />
            <dependency org="org.springframework" name="org.springframework.test" rev="3.0.5.RELEASE" conf="eclipse->*" transitive="false" />
            <dependency org="org.springframework" name="org.springframework.transaction" rev="3.0.5.RELEASE" conf="eclipse->*" transitive="false" />
        </dependencies>
    </ivy-module>
    

    Revised ivysettings.xml

    <ivysettings>
        <settings defaultResolver="chain"/>
        <resolvers>
            <chain name="chain">
                <ibiblio name='central' m2compatible='true'/>
                <ibiblio name='springsource-external' m2compatible='true' root='http://repository.springsource.com/maven/bundles/external'/>
                <url name="googlecode">
                    <artifact pattern="http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]" />
                    <artifact pattern="http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]" />
                </url>
            </chain>
        </resolvers>
    </ivysettings>
    
    0 讨论(0)
  • 2021-02-13 19:38

    I would advise to not use the "transitive" attribute on the dependency declaration and instead attempt to solve your problem using configurations.

    Configurations in ivy are functionally the same as scopes in Maven, but far more flexible.

    I normally declare at least the following 3 configurations in my code

        <configurations>
            <conf name="compile" description="Compile time dependencies"/>
            <conf name="runtime" description="Compile time dependencies" extends="compile"/>
            <conf name="test"    description="Compile time dependencies" extends="runtime"/>
        </configurations>
    

    Corresponds to 3 groups of dependencies I'll need for any java project.

    The secret is how you map you depdencies to your configurations. If you only want the jar without it's dependencies, then declare it as follows:

    <dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" conf="compile->master"/>
    

    The local compile configuration mapped to the master scope of the remote Maven module. The master scope in Maven excludes any transitive dependencies.

    If you want the artifact to include it's transitive dependencies then declare the configuration mapping as follows:

    <dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" conf="compile->default"/>
    

    Working ivy.xml file

    This will download a single jar.

    <?xml version="1.0" encoding="UTF-8"?>
    <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="red5" module="server" />
        <configurations>
            <conf name="default"/>
            <conf name="java6" extends="default" description="Java 6 dependencies"/>
            <conf name="utest" extends="eclipse" description="Unit testing dependencies"/>
            <conf name="eclipse" description="Special dependencies in Eclipse"/>
        </configurations>
        <dependencies>
            <dependency org="org.springframework" name="org.springframework.core" rev="3.0.5.RELEASE" conf="default->master"/>
        </dependencies>
    </ivy-module>
    

    Revised settings file

    I would also recommend using the ibiblio resolver, which is designed to understand the Maven 1 and Maven 2 repository formats:

    <ivysettings>
        <settings defaultResolver="local"/>
        <resolvers>
            <chain name="local">
                <ibiblio name='springsource-releases' m2compatible='true' root='http://repository.springsource.com/maven/bundles/release'/>
                 ..
                 ..
            </chain>
        </resolvers>
    </ivysettings>
    

    Note I'm using the Springsource Maven repository, which is more likely to be up-to-date. I don't know if they maintain the old ivy repositories properly or not anymore.

    0 讨论(0)
提交回复
热议问题