如何使用Ant将jsp预编译的web.xml片段与主web.xml合并

Chr*_*ton 5 java ant jsp tomcat web.xml

我们的web应用程序有通常的web.xml,其中包含一些jsp和jsp标记文件.我想切换到使用预编译的jsp.我在build ok中进行了预编译,它生成了web.xml片段,现在我想将片段合并到主web.xml中.

是否有web.xmlinclude类型指令可以让我包含片段.

理想情况下,我会保留DEV的内容,因为它有助于动态更改jsp并立即查看更改,但是对于UAT/PROD,jsp将被预编译,从而更快地工作.

Mad*_*sen 4

我在项目中使用Tomcat jasper ANT 任务,它将 JSP 预编译为 servlet,并将新的 servlet 映射添加到原始 web.xml。在 DEV 构建中,只需跳过此步骤并部署 JSP,无需预编译和修改 web.xml。

    <?xml version="1.0"?>
<project name="jspc" basedir="." default="all">
 <import file="${build.appserver.home}/bin/catalina-tasks.xml"/>

 <target name="all" depends="jspc,compile"></target>

 <target name="jspc">
  <jasper
   validateXml="false"
   uriroot="${build.war.dir}"
   webXmlFragment="${build.war.dir}/WEB-INF/generated_web.xml"
   addWebXmlMappings="true"
   outputDir="${build.src.dir}" />
 </target>

 <target name="compile">
  <javac destdir="${build.dir}/classes"
   srcdir="${build.src.dir}"
   optimize="on"
   debug="off"
   failonerror="true"
   source="1.5"
   target="1.5"
   excludes="**/*.smap">
   <classpath>
    <fileset dir="${build.war.dir}/WEB-INF/classes">
     <include name="*.class" />
    </fileset>
    <fileset dir="${build.war.lib.dir}">
     <include name="*.jar" />
    </fileset>
    <fileset dir="${build.appserver.home}/lib">
     <include name="*.jar" />
    </fileset>    
    <fileset dir="${build.appserver.home}/bin">
     <include name="*.jar"/>
    </fileset>
   </classpath>
    <include name="**" />
    <exclude name="tags/**"/>
  </javac>
 </target>

 <target name="clean">
  <delete>
   <fileset dir="${build.src.dir}"/>
   <fileset dir="${build.dir}/classes/org/apache/jsp"/>
  </delete>
 </target>
</project>
Run Code Online (Sandbox Code Playgroud)

如果您已经进行了 JSP 编译,并且只想合并 web.xml 文件,则可以编写一个简单的 XSLT,将新生成的 web.xml 中的选定元素(例如 servlet 映射)添加到原始文件中。