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引用了Tomcatlib目录下的核心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
相关产品推荐
相关产品推荐

