从ANT创建war文件时,Jar被复制了两次

时间:2011-05-25 10:37:09

标签: java ant jar

我是ANT的新手并尝试使用简单的ANT脚本来创建项目的.war文件。
这是我的脚本
当我运行此脚本时,一切正常,但.jar中的WebContent/WEB-INF/lib文件在.war文件中被复制两次。

<?xml version="1.0" ?>
<project name="AutoComplete">
     <path id="compile.classpath">
        <fileset dir="WebContent/WEB-INF/lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="init">
        <mkdir dir="build/classes"/>
    </target>

    <target name="compile" depends="init" >
        <javac includeantruntime="false" destdir="build/classes" debug="true" srcdir="src" >
            <classpath refid="compile.classpath"/>
        </javac>
    </target>

    <target name="build.war" depends="compile">
        <war destfile="AutoComplete.war" webxml="WebContent/WEB-INF/web.xml">
            <fileset dir="WebContent"/>
            <lib dir="WebContent/WEB-INF/lib"/>
            <classes dir="build/classes"/>
        </war>
    </target>

    <target name="clean">
        <delete dir="build" />
    </target>

</project>

如果我犯了任何错误,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:9)

您的build.war任务似乎是罪魁祸首:

    <war destfile="AutoComplete.war" webxml="WebContent/WEB-INF/web.xml">
        <fileset dir="WebContent"/>
        <lib dir="WebContent/WEB-INF/lib"/>
        <classes dir="build/classes"/>
    </war>

第一个嵌套<fileset>将所有文件从WebContent拉入WAR的根目录。第二行然后明确说明WebContent/WEB-INF/lib中的所有内容都应该被视为一个库(因此被复制到WAR内的WEB-INF/lib)。

删除其中一行应该意味着libs被复制一次 - 如果你确实希望将WebContent中的所有内容按原样复制到WAR中,你可以删除<lib>行。