示例说明如何使用文件系统解析程序

时间:2012-04-16 13:23:14

标签: ivy

任何人都可以通过考虑来解释我如何在Ivy中使用文件系统解析器和样本。

  1. 我有ivy.xml文件,我已经定义了所有的dependecies但我希望我的文件系统中的jar不是来自maven存储库..?

  2. 我在哪里放ivysettings.xml文件。

  3. 使用ivysettings.xml应该包含什么build.xml,以便我可以使用来自文件系统的jar而不是来自maven ..

2 个答案:

答案 0 :(得分:22)

ivysettings.xml 文件默认位于与 ivy.xml 文件相同的目录中。

可以使用常春藤settings task

指定其他位置

项目结构

位于 lib 目录中的第三方依赖项。

$ 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

此常春藤文件使用配置来管理3种依赖项:

  1. 编译
  2. 运行时
  3. 测试
  4. 这些将对应于ANT构建使用的类路径。

    <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

    没什么特别的。简单映射到位于 lib 目录中的jar:

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

    或者.....我将永远包括非本地罐子的Maven中央回购,如下所示:

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

    modules 部分指定应在本地检索哪些jar。

    的build.xml

    最后使用常春藤来管理类路径的构建逻辑。

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

答案 1 :(得分:-2)

如果您只是在本地拉罐子并且根本不想使用Maven Central,那么Ivy会浪费你的时间。只需将您需要的任何jar放在/ lib文件夹中,将其添加到类路径中,然后运行Ant文件。 Ivy用于与Maven Central进行交互。但是,如果你需要同时做两件事,从Maven拉出普通罐子并从当地拉出第三方罐子,Mark的解决方案是一个很好的解决方案。