You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 11迁移:Ant构建中JSP编译失败的build.xml修改方案咨询

解决Java 11迁移中Ant构建JSP编译失败的问题

我来帮你搞定这个问题!你遇到的核心原因就是Java 11已经彻底移除了tools.jar——JDK 9之后的模块化重构把tools.jar里的工具类整合进了JDK的核心模块中,所以原来build.xml里依赖tools.jar的配置肯定会失效。结合你用的Tomcat 9.0.24和Ant 1.10.7,咱们直接修改build.xml的两处关键配置就能解决:

1. 移除classpath.jspc中的tools.jar引用

直接删掉这一行:

<pathelement location="${java.home}/../lib/tools.jar"/>

Java 11环境下,Tomcat 9的Jasper编译器已经不需要依赖这个文件了,Tomcat自身的lib包已经包含了JSP编译所需的所有工具类。

2. 优化Jasper任务的编译配置(可选但推荐)

Tomcat 9默认使用Eclipse JDT编译器来编译JSP,这个编译器对Java 11的兼容性更好。你可以给<jasper>任务显式指定编译器,同时确保输出目录和URIRoot配置正确:

<jasper validateXml="false" 
        uriroot="${web_root.dir}" 
        webXmlFragment="${build.jsp.dir}/Web_root/WEB-INF/web-fragment.xml" 
        outputDir="${build.jsp.dir}/Web_root"
        compiler="org.apache.jasper.compiler.JDTCompiler"/>

修改后的完整compile_jsp目标和classpath.jspc路径

<target name="compile_jsp" depends="compile_debug"> 
    <jasper validateXml="false" 
            uriroot="${web_root.dir}" 
            webXmlFragment="${build.jsp.dir}/Web_root/WEB-INF/web-fragment.xml" 
            outputDir="${build.jsp.dir}/Web_root"
            compiler="org.apache.jasper.compiler.JDTCompiler"/> 
    <javac deprecation="false" includeantruntime="false" nowarn="false" 
           destdir="${build.jsp.dir}/Web_root" 
           srcdir="${build.jsp.dir}/Web_root" 
           source="11" target="11"> 
        <classpath refid="classpath.jspc"/> 
    </javac> 
</target> 

<path id="classpath.jspc"> 
    <!-- 已移除tools.jar引用 -->
    <path refid="classpath.jasper_compiler" /> 
    <fileset dir="${tomcat.home}/bin"> 
        <include name="*.jar"/> 
    </fileset> 
    <fileset dir="${weblogic12.lib.dir}" erroronmissingdir="false"> 
        <include name="*javax.mail*.jar"/> 
    </fileset> 
</path>

额外验证点

  • 确保classpath.jasper_compiler引用了Tomcat lib目录下的核心JAR,比如jasper.jar、jasper-el.jar、tomcat-api.jar、tomcat-jasper.jar这些,这些是JSP编译的基础依赖。
  • 确认你的Ant 1.10.7已经适配Java 11——Ant 1.10.x版本本身是支持Java 11的,这点没问题。

这样修改后,你的JSP编译任务应该就能正常工作了,毕竟Tomcat 9本身就是为Java 8+设计的,和Java 11的兼容性很好,只是需要调整掉老的JDK依赖。

内容的提问来源于stack exchange,提问作者anirban karak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:38:29