在Apache Tomcat 8.0.12中编译JSP时出错



我最近从Apache Tomcat 6.X升级到7.X,再升级到8.0.12。我目前能够在tomcat 8中编译和运行我的应用程序;然而,我的ant预编译jsp的任务已经不起作用了。奇怪的是,如果我切换回tomcat 7而不做任何其他更改,JspC调用就会工作!

以下是蚂蚁任务的错误输出:

2014年9月17日下午4:01:23 org.apache.jasper.servlet.Tld扫描仪扫描Jars信息:至少扫描了一个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(ParserContrler.java:227)网址:org.apache.jasper.compiler.ParserController.parse(ParserContrler.java:100)网址:org.apache.jasper.compiler.compiler.generateJava(compiler.java:199)网址:org.apache.jasper.compiler.compiler.compiler(compiler.java:356)网址:org.apache.jasper.JspC.processFile(JspC.java:1217)网址:org.apache.jasper.JspC.execute(JspC.java:1368)网址:org.apache.tools.ant.UnnknownElement.execute(UnknownElement.java:292)位于sun.reflect.GeneratedMethodAccessor7.invoke(未知源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)位于java.lang.reflect.Method.ioke(Method.java:483)网址:org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtil.java:106)网址:org.apache.tools.ant.Task.aperform(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.slaunching.remote.EclipseDefaultExecutior.executeTargets(EclipseDefaultExecutior.java:36)网址:org.apache.tools.ant.Project.executeTargets(Project.java:1248)网址:org.eclipse.ant.internal.slaunching.remote.InternalAntRunner.run(InternalAntRunner.java:452)网址:org.eclipse.ant.internal.slaunching.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>

我试过使用taglib,并确保它们都被正确声明。据我所知,他们是。我无法解释来自TldCache.java的NullPointerException的原因。是否有其他人经历过这种情况或对可能的解决方案有任何想法?

我发现我在WEB-INF/tags目录中定义了一个.tld文件,该文件在ant目标中被明确排除。从ant目标中删除排除是不起作用的,所以我将.tld定义移动到/WEB-INF/jsps。我还必须恢复jasper taskdef的定义,根据Apache的文档,我将其更改为从catalina-ant.xml导入。

总之,将.tld从WEB-INF/tags移动到WEB-INF/jsps,并在ant中添加了一个jasper taskdef。

蚂蚁的最终任务如下:

<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" />
    <taskdef classname="org.apache.jasper.JspC" name="jasper">
        <classpath id="jspc.classpath">
            <pathelement location="${java.home}/../lib/tools.jar"/>
            <fileset dir="${local.ctx1.home}/bin">
                <include name="*.jar"/>
            </fileset>
            <fileset dir="${local.ctx1.home}/lib">
                <include name="*.jar"/>
            </fileset>
            <pathelement path="${rade2.class.dir}" />
            <path refid="compile_classpath" />
        </classpath>
    </taskdef>
    <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>

相关内容

  • 没有找到相关文章

最新更新