sample example which explain how to use filesystem resolver

后端 未结 2 1286
有刺的猬
有刺的猬 2020-11-27 06:01

Can anyone explain me how to use filesystem resolver in Ivy with sample by considering..

  1. I have ivy.xml file where i have defined all the dependecies but i

相关标签:
2条回答
  • 2020-11-27 06:02

    If you're ONLY pulling jars locally and do not want to use Maven Central at all, Ivy is a waste of your time. Just put whatever jars you need in your /lib folder, add that to your classpath, and run your Ant file. Ivy is for interacting with Maven Central. However, if you need to do both, pull common jars from Maven and pull 3rd party jars from local, Mark's solution is a great one.

    0 讨论(0)
  • 2020-11-27 06:06

    The ivysettings.xml file is located by default in the same directory as the ivy.xml file.

    Alternative locations can be specified using the ivy settings task

    Project structure

    3rd party dependencies located in the lib directory.

    $ tree
    .
    |-- build.xml
    |-- ivysettings.xml
    |-- ivy.xml
    |-- lib
    |   |-- junit-4.10.jar
    |   |-- slf4j-api-1.6.4.jar
    |   `-- slf4j-simple-1.6.4.jar
    `-- src
        |-- main
        |   `-- java
        |       `-- org
        |           `-- demo
        |               `-- App.java
        `-- test
            `-- java
                `-- org
                    `-- demo
                        `-- AppTest.java
    
    10 directories, 8 files
    

    ivy.xml

    This ivy file uses configurations to manages 3 kinds of dependencies:

    1. compile
    2. runtime
    3. test

    These will correspond to the classpaths used by the ANT build.

    <ivy-module version="2.0">
        <info organisation="com.myspotontheweb" module="demo"/>
    
        <configurations defaultconfmapping="compile->default">
            <conf name="compile" description="Required to compile application"/>
            <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
            <conf name="test"    description="Required for test only" extends="runtime"/>
        </configurations>
    
        <dependencies>
            <!-- compile dependencies -->
            <dependency org="org.slf4j" name="slf4j-api" rev="1.6.4"/>
    
            <!-- runtime dependencies -->
            <dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="runtime->default"/>
    
            <!-- test dependencies -->
            <dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
        </dependencies>
    
    </ivy-module>
    

    ivysettings.xml

    Nothing fancy. Simple mapping to the jars located in the lib directory:

    <ivysettings>
        <settings defaultResolver="local"/>
        <resolvers>
            <filesystem name="local">
                <artifact pattern="${ivy.settings.dir}/lib/[artifact]-[revision].[ext]"/>
            </filesystem>
        </resolvers>
    </ivysettings>
    

    Alternatively..... I would always include the Maven central repo for non-local jars as follows:

    <ivysettings>
        <settings defaultResolver="central"/>
        <resolvers>
            <ibiblio name="central" m2compatible="true"/>
            <filesystem name="local">
                <artifact pattern="${ivy.settings.dir}/lib/[artifact]-[revision].[ext]"/>
            </filesystem>
        </resolvers>
        <modules>
            <module organisation="org.slf4j" resolver="local"/>
            <module organisation="junit" name="junit" resolver="local"/>
        </modules>
    </ivysettings>
    

    The modules section specifies which jars should be retrieved locally.

    build.xml

    Finally the build logic that uses ivy to manage the classpaths.

    <project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <!--
        ================
        Build properties
        ================
        -->
        <property name="src.dir" location="src/main/java"/>
        <property name="test.src.dir" location="src/test/java"/>
        <property name="build.dir" location="build"/>
        <property name="classes.dir" location="${build.dir}/classes"/>
        <property name="test.classes.dir" location="${build.dir}/test-classes"/>
        <property name="ivy.reports.dir"  location="${build.dir}/ivy-reports"/>
        <property name="test.reports.dir"  location="${build.dir}/test-reports"/>
    
        <!--
        ===========
        Build setup
        ===========
        -->
        <target name="init">
            <ivy:resolve/>
    
            <ivy:report todir='${ivy.reports.dir}' graph='false' xml='false'/>
    
            <ivy:cachepath pathid="compile.path" conf="compile"/>
            <ivy:cachepath pathid="runtime.path" conf="runtime"/>
            <ivy:cachepath pathid="test.path"    conf="test"/>
    
            <mkdir dir="${classes.dir}"/>
            <mkdir dir="${test.classes.dir}"/>
            <mkdir dir="${test.reports.dir}"/>
        </target>
    
        <!--
        ===============
        Compile targets
        ===============
        -->
        <target name="compile" depends="init">
            <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" debug="true" classpathref="compile.path"/>
        </target>
    
        <target name="compile-tests" depends="compile">
            <javac srcdir="${test.src.dir}" destdir="${test.classes.dir}" includeantruntime="false" debug="true">
                <classpath>
                    <path refid="test.path"/>
                    <pathelement path="${classes.dir}"/>
                </classpath>
            </javac>
        </target>
    
        <!--
        ============
        Test targets
        ============
        -->
        <target name="test" depends="compile-tests">
            <junit printsummary="yes" haltonfailure="yes">
                <classpath>
                    <path refid="test.path"/>
                    <pathelement path="${classes.dir}"/>
                    <pathelement path="${test.classes.dir}"/>
                </classpath>
                <formatter type="xml"/>
                <batchtest fork="yes" todir="${test.reports.dir}">
                    <fileset dir="${test.src.dir}">
                        <include name="**/*Test*.java"/>
                        <exclude name="**/AllTests.java"/>
                    </fileset>
                </batchtest>
            </junit>
        </target>
    
        <!--
        =====================
        Build and run targets
        =====================
        -->
        <target name="build" depends="test"/>
    
        <target name="run" depends="build">
            <java classname="org.demo.App">
                <classpath>
                    <path refid="runtime.path"/>
                    <pathelement location="${classes.dir}"/>
                </classpath>
            </java>
        </target>
    
        <!--
        =============
        Clean targets
        =============
        -->
        <target name="clean">
            <delete dir="${build.dir}"/>
        </target>
    
        <target name="clean-all" depends="clean">
            <ivy:cleancache/>
        </target>
    
    </project>
    
    0 讨论(0)
提交回复
热议问题