是否有任何Ant特性可以将类路径依赖项复制到WEB-INF/lib?

是否有任何Ant特性可以将类路径依赖项复制到WEB-INF/lib?,ant,Ant,我不能影响将类路径依赖项复制到WEB-INF/lib类别的过程:没有专门的ANT任务复制这些JAR(至少,我找不到任何以相关的“WEB-INF/lib”字符串作为路径参数的“复制”任务),但它们出现在项目构建之后。如何影响这个过程?基本上,我需要排除JAXB JAR以避免依赖冲突。同时,我在编译时需要这些JAR,所以我无法删除它们。也许,使用“删除”任务手动擦除这些JAR更容易些?您所面临的是多类路径管理。在典型的构建中,至少有4种类型的类路径: 编译:代码直接调用的类 运行时:代码通过其他类

我不能影响将类路径依赖项复制到WEB-INF/lib类别的过程:没有专门的ANT任务复制这些JAR(至少,我找不到任何以相关的“WEB-INF/lib”字符串作为路径参数的“复制”任务),但它们出现在项目构建之后。如何影响这个过程?基本上,我需要排除JAXB JAR以避免依赖冲突。同时,我在编译时需要这些JAR,所以我无法删除它们。也许,使用“删除”任务手动擦除这些JAR更容易些?

您所面临的是多类路径管理。在典型的构建中,至少有4种类型的类路径:

  • 编译:代码直接调用的类
  • 运行时:代码通过其他类间接调用的类
  • 提供的:需要编译的类,但其实现将由目标平台提供
  • 测试:测试代码时需要的附加类(如junit),但最终应用程序未附带这些类
正是构建工具正式标识了这些公共类路径,并提供了一个依赖关系管理系统,用于在构建过程中解析和填充类路径

坏消息是ANT提前了日期,因此将类路径管理完全交给了程序员。。。。通常,这是通过将JAR放入不同的目录或在构建逻辑中使用复杂的文件集来实现的

好消息是有一个名为ANT的插件,它执行类似Maven的依赖关系管理。这是值得学习的,尤其是如果您大量使用开源库(现在越来越多地使用Maven)编程的话

示例(无常春藤) 组成各个类路径的文件必须在构建的顶部进行管理。显然,这些文件必须单独下载到“lib”目录中。随着文件数量的增加,这种方法变得难以使用

<project name="demo" default="build">

    <!-- 
    ================
    File collections 
    ================
    -->
    <fileset dir="lib" id="compile.files">
        <include name="*.jar"/>
        <exclude name="slf4j-log4j12.jar"/>
        <exclude name="log4j.jar"/>
        <exclude name="junit.jar"/>
        <exclude name="hamcrest-core.jar"/>
    </fileset>

    <fileset dir="lib" id="runtime.files">
        <include name="*.jar"/>
        <exclude name="junit.jar"/>
        <exclude name="hamcrest-core.jar"/>
    </fileset>

    <fileset dir="lib" id="test.files">
        <include name="*.jar"/>
    </fileset>

    <!--
    ===============
    Compile targets
    ===============
    -->
    ..
    ..

    <target name="compile" depends="init,resolve, resources" description="Compile code">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" debug="true">
            <classpath>
                <fileset refid="compile.files"/>
            </classpath>
        </javac>
    </target>

    <!--
    ===============
    Distribution targets
    ===============
    -->
    ..
    ..

    <target name="package" depends="test" description="Create the WAR file">
        <copy todir="build/lib">
            <fileset refid="runtime.files"/>
        </copy>

        <war destfile="${war.file}" webxml="${resources.dir}/web.xml">
            <fileset dir="${resources.dir}" excludes="web.xml"/>
            <lib dir="${build.dir}/lib"/>
        </war>
    </target>

..
..
..
..
示例(使用常春藤) 非常高水平的常春藤及其任务介绍。请参阅下面的“检索”常春藤任务,它提供了您正在寻找的功能

编译文件

..
..
..
..
注释

  • “bootstrap”目标设计用于安装ivy(它没有与ANT core打包)
  • “cachepath”任务用于创建自定义ANT路径
  • “检索”任务使用运行时所需的JAR(由ivy配置管理)填充WAR文件的WEB-INF/lib目录
ivy.xml 此文件列出了项目的依赖项。它使用配置将jar逻辑地分组在一起,并支持ivy“cachpath”任务在构建中创建匹配的类路径。最后,在构建过程中下载并缓存第三方JAR。这非常方便,这意味着您可以减少项目的规模

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <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.7.2" conf="compile->default"/>

        <!-- runtime dependencies -->
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.2" conf="runtime->default"/>

        <!-- test dependencies -->
        <dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
    </dependencies>

</ivy-module>

您所面临的是多类路径管理。在典型的构建中,至少有4种类型的类路径:

  • 编译:代码直接调用的类
  • 运行时:代码通过其他类间接调用的类
  • 提供的:需要编译的类,但其实现将由目标平台提供
  • 测试:测试代码时需要的附加类(如junit),但最终应用程序未附带这些类
正是构建工具正式标识了这些公共类路径,并提供了一个依赖关系管理系统,用于在构建过程中解析和填充类路径

坏消息是ANT提前了日期,因此将类路径管理完全交给了程序员。。。。通常,这是通过将JAR放入不同的目录或在构建逻辑中使用复杂的文件集来实现的

好消息是有一个名为ANT的插件,它执行类似Maven的依赖关系管理。这是值得学习的,尤其是如果您大量使用开源库(现在越来越多地使用Maven)编程的话

示例(无常春藤) 组成各个类路径的文件必须在构建的顶部进行管理。显然,这些文件必须单独下载到“lib”目录中。随着文件数量的增加,这种方法变得难以使用

<project name="demo" default="build">

    <!-- 
    ================
    File collections 
    ================
    -->
    <fileset dir="lib" id="compile.files">
        <include name="*.jar"/>
        <exclude name="slf4j-log4j12.jar"/>
        <exclude name="log4j.jar"/>
        <exclude name="junit.jar"/>
        <exclude name="hamcrest-core.jar"/>
    </fileset>

    <fileset dir="lib" id="runtime.files">
        <include name="*.jar"/>
        <exclude name="junit.jar"/>
        <exclude name="hamcrest-core.jar"/>
    </fileset>

    <fileset dir="lib" id="test.files">
        <include name="*.jar"/>
    </fileset>

    <!--
    ===============
    Compile targets
    ===============
    -->
    ..
    ..

    <target name="compile" depends="init,resolve, resources" description="Compile code">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" debug="true">
            <classpath>
                <fileset refid="compile.files"/>
            </classpath>
        </javac>
    </target>

    <!--
    ===============
    Distribution targets
    ===============
    -->
    ..
    ..

    <target name="package" depends="test" description="Create the WAR file">
        <copy todir="build/lib">
            <fileset refid="runtime.files"/>
        </copy>

        <war destfile="${war.file}" webxml="${resources.dir}/web.xml">
            <fileset dir="${resources.dir}" excludes="web.xml"/>
            <lib dir="${build.dir}/lib"/>
        </war>
    </target>

..
..
..
..
示例(使用常春藤) 非常高水平的常春藤及其任务介绍。请参阅下面的“检索”常春藤任务,它提供了您正在寻找的功能

编译文件

..
..
..
..
注释<