我最近从 Apache Tomcat 6.X 升级到 7.X 到 8.0.12。我目前能够在 tomcat 8 中编译和运行我的应用程序;但是,我用于预编译 jsps 的 ant 任务不再有效。奇怪的是,如果我切换回 tomcat 7 而不进行任何其他更改,则 JspC 调用将起作用!
这是 ant 任务的错误输出:
2014 年 9 月 17 日下午 4:01:23 org.apache.jasper.servlet.TldScanner scanJars 信息:至少有一个 JAR 已扫描 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。 java.lang.NullPointerException 在 org.apache.jasper.compiler.TldCache.getTaglibXml(TldCache.java:97) 在 org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:179) 在 org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411) 在 org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469) 在 org.apache.jasper.compiler.Parser.parseElements(Parser.java:1428) 在 org.apache.jasper.compiler.Parser.parse(Parser.java:139) 在 org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227) 在 org.apache.jasper.compiler.ParserController.parse(ParserController.java:100) 在 org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:356) 在 org.apache.jasper.JspC.processFile(JspC.java:1217) 在 org.apache.jasper.JspC.execute(JspC.java:1368) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 在 sun.reflect.GeneratedMethodAccessor7.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform(Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:435) 在 org.apache.tools.ant.Target.performTasks(Target.java:456) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1364) 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:36) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1248) 在 org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:452) 在 org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:139)
这是蚂蚁任务:
<target name="jspc-tomcat" depends="compile" description="compile jsps using tomcat jspc">
<copy overwrite="false" file="${webxml.dir}/web.xml" tofile="web/WEB-INF/web.xml" />
<jasper
uriroot="web"
outputDir="${build.dir}/JSP/src" />
<delete file="web/WEB-INF/web.xml"/>
</target>
<target name="compile-jsps" depends="jspc-tomcat" description="compile jsps using apache tomcat">
<mkdir dir="${build.dir}/JSP/classes"/>
<mkdir dir="${build.dir}/JSP/lib"/>
<javac memoryInitialSize="128m" memoryMaximumSize="512m" destdir="${build.dir}/JSP/classes"
optimize="off" fork="true"
debug="on" failonerror="false" source="1.8" target="1.8"
srcdir="${build.dir}/JSP/src" includeantruntime="false"
excludes="**/*.smap">
<classpath>
<fileset dir="${local.ctx1.home}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${local.ctx1.home}/bin">
<include name="*.jar"/>
</fileset>
<pathelement path="${rade2.class.dir}" />
<path refid="compile_classpath" />
</classpath>
<include name="**" />
<exclude name="tags/**" />
</javac>
</target>
我尝试过使用标签库并确保它们都被正确声明。据我所知,他们是。我无法解释来自 TldCache.java 的 NullPointerException 的原因。有没有其他人经历过这种情况或对可能的解决方案有任何想法?