如何在tomcat上部署战争时跳过图像

时间:2013-08-03 23:10:29

标签: tomcat war

我有一个Java Web应用程序。我正在使用ant文件将其部署为战争到Tomcat服务器上。我可以成功地做到这一点。请在下面找到build.xml 现在的挑战是我的应用程序在web文件夹下有100000张图像被复制到war根文件夹。

如果我在war文件的根文件夹中创建一个包含100000张图像的战争,那将是非常令人头疼的问题。

每次我更改JSP或java代码中的任何内容时,新的war会再次复制war文件夹中的那些100000个图像,这需要花费1个多小时来构建war文件。

如何确保战争中的图像文件夹不会在每次部署时反复复制?

<!-- setting classpath -->


<path id="base.class.path">
    <pathelement location="lib/joda-time-1.6.1.jar" />
    <pathelement location="lib/fedExTrackingWebService.jar" />
    ....
    .....
</path>
  

 <property file="build.properties"/>

    <path id="classpath">
        <fileset dir="${lib.dir}"/>
    </path>

    <target name="clean">
        <echo>Cleaning the ${build.dir}</echo>
        <delete dir="${build.dir}"/>
        <delete dir="${dist.dir}"/>
    </target>

    <target name="init" depends="clean">
        <echo>Creating the build directory</echo>
        <mkdir dir="${build.dir}/WEB-INF/classes"/>
        <mkdir dir="${build.dir}/WEB-INF/lib"/>
        <mkdir dir="${dist.dir}"/>
    </target>

    <target name="compile" depends="init">
        <echo>Compile the source files</echo>
        <javac srcdir="${src.dir}" destdir="${build.dir}/WEB-INF/classes">
            <classpath refid="base.class.path"/>                
        </javac>
    </target>

    <target name="copy" depends="compile">
        <copy todir="${build.dir}/WEB-INF">
            <fileset dir="${web.dir.webinf}/WEB-INF"/>
        </copy>
        <copy todir="${build.dir}">
            <fileset dir="${web.dir}"/>
        </copy>
        <copy todir="${build.dir}/WEB-INF/lib">
            <fileset dir="${lib.dir}">
                            </fileset>
        </copy>
    </target>


    <target name="war">
        <echo>Building the war file</echo>
        <war destfile="${dist.dir}/${ant.project.name}.war" webxml="${build.dir}/WEB-INF/web.xml">
            <fileset dir="${build.dir}"/>
        </war>
    </target>

    <target name="deploy_local" depends="war">
        <echo>Deploying .war to local Tomcat</echo>
        <copy todir="${tomcat.dir}/webapps">
            <fileset dir="${dist.dir}">
                <include name="${ant.project.name}.war"/>
            </fileset>
        </copy>
    </target> 

1 个答案:

答案 0 :(得分:1)

您可以尝试逐步修改war文件:

<target name="war" update="true">

您可以将图像初步包含在war文件中,然后在复制任务中将它们从文件集中排除。

E.g:

<target name="copy" depends="compile">
    <copy todir="${build.dir}">
        <fileset dir="${web.dir}">
           <exclude name="images/**"/>
        </fileset>
    </copy>

您也可以考虑将duplicate="preserve"添加到蚂蚁战争任务中。它并不认为它与你的问题直接相关,但仍然存在。

但按照manual

  

请注意,Zip格式允许使用相同的多个文件   单个存档中存在的完全限定名称。这一直是   记录为不知情的用户造成各种问题。如果你   希望避免此行为,您必须将duplicate属性设置为a   默认值以外的值,“添加”。

此处还有blog post