0

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

如果我在 war 文件的根文件夹中创建一个包含 100000 个图像的战争,那会很头疼。

每次我在 JSP 或 java 代码中更改任何内容时,新的战争都会再次将这 100000 个图像复制到 war 文件夹中,这需要 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> 

4

1 回答 1

1

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

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

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

例如:

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

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

但按照手册

请注意,Zip 格式允许在一个存档中存在多个具有相同完全限定名称的文件。这已被记录为会给毫无戒心的用户带来各种问题。如果您希望避免这种行为,您必须将重复属性设置为默认值“add”以外的值。

还有这里的博客文章

于 2013-08-04T01:43:43.540 回答