如何在Ant WAR任务中包含配置文件?

时间:2014-04-24 15:41:04

标签: java ant war build.xml

我有一个Java Web应用程序,我正在使用Ant为我生成WAR文件。这是我的项目结构:

src/main/java/
    <Java sources>
src/main/config/
    web.xml
    mvc-dispatcher-servlet.xml
    pages/
        home.jsp
        cool.jsp
lib/main/
    <Libs>
gen/
    bin/
    dist/

我需要使用以下目录结构生成Java WAR:

myapp.war/
    META-INF/
    WEB-INF/
        web.xml
        mvc-dispatcher.xml
        pages/
            home.jsp
            cool.jsp
        classes/
            <Compiled Java binaries>
        lib/
            <All lib JARS>

这是我的WAR任务:

<target name="package" depends="compile">
    <war destfile="gen/dist/myapp.war" webxml="src/main/config/web.xml"
            basedir="gen/bin"
            includes="src/main/config">
        <classes dir="gen/bin" />
        <lib dir="lib/main" />
    </war>
</target>

当我运行此目标时,它会生成一个具有以下结构的WAR:

myapp.war/
    META-INF/
    WEB-INF/
        web.xml
        classes/
            <Compiled Java binaries>
        lib/
            <All lib JARS>

注意mvc-dispatcher-servlet.xml和整个pages目录是如何丢失的?我做错了什么?

2 个答案:

答案 0 :(得分:1)

您正在寻找webinf元素。有关详细信息,请参阅ant manual

  

嵌套的webinf元素指定FileSet。包含的所有文件   此文件集将最终位于war文件的WEB-INF目录中。如果   此文件集包含一个名为web.xml的文件,该文件将被忽略   你会收到警告。

使用包含多个用例的以下代码段。

<war destfile="${build.dir}/${ant.project.name}_${version}.war" webxml="${web.dir}/WEB-INF/web.xml">
    <webinf dir="${web.dir}/WEB-INF">
        <exclude name="web.xml"/>
        <exclude name="classes/**"/>
        <exclude name="lib/**"/>
        <exclude name="flex/services-config.xml"/>
    </webinf>
    <lib dir="${war.web-inf.dir}/lib"/>
    <lib file="${build.dir}/*.jar"/>
    <fileset dir="${web.dir}">
        <include name="img/*"/>
    </fileset>

答案 1 :(得分:0)

您可能需要考虑使用zip ant任务而不是war。您可以将所有类/库复制到所需结构中的文件夹中,并将内容压缩为.war文件。只要web.xml在战争中处于正确的位置,就可以毫无问题地部署战争。