如何更改tomcat编译器

问题描述 投票:14回答:5

我正在尝试在字符串功能上使用新的Java 7开关。

但是Tomcat没有合作。

我确保tomcat在java 7下运行,但它似乎没有在它下面进行编译。

我已将以下内容添加到jsp servlet条目下的web.xml文件中

    <init-param>
        <param-name>compiler</param-name>
        <param-value>C:/Program Files/Java/jdk1.7.0/bin/javac.exe</param-value>
    </init-param>

但它似乎没有做到这一点。

任何提示将不胜感激。

tomcat java-7
5个回答
11
投票

我们正在运行Tomcat 6并遇到了同样的问题。我们的解决方案是:

  • tomcat/lib/ecj-3.3.1.jar替换ecj-3.7.2.jar(可以从最新的Tomcat 7版本中获取);
  • 将此添加到tomcat/conf/web.xml ... <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- this should be added --> <param-name>compilerSourceVM</param-name> <param-value>1.7</param-value> </init-param> <init-param> <param-name>compilerTargetVM</param-name> <param-value>1.7</param-value> </init-param> <!-- last added line --> <load-on-startup>3</load-on-startup> </servlet>

当然,更简单的替代方法是安装Tomcat 7,但这可能不适合所有人。


0
投票

你在这里混合了什么。您希望JSP使用Java 7进行编译,而不是使用Java 7运行tomcat.Tomcat使用的是尚未支持Java 7的Eclipse Java编译器。

编辑:我做了一些挖掘。正如您所见,here使用了内置的Eclipse编译器。与Tomcat 7.0.19一起发布的编译器是ECJ 3.7,它将支持Java 7而不是3.7.1之前的版本。


0
投票

根据使用的Tomcat版本,tomcat提供的JSP引擎使用特定的Java默认版本来编译和运行JSP。

Tomcat 7使用1.6版本

compilerSourceVM - 与哪些JDK版本的源文件兼容? (默认值:1.6)

compilerTargetVM - 生成的文件与哪些JDK版本兼容? (默认值:1.6)

Tomcat 8使用1.7版本

compilerSourceVM - 与哪些JDK版本的源文件兼容? (默认值:1.7)

compilerTargetVM - 生成的文件与哪些JDK版本兼容? (默认值:1.7)

Tomcat 9使用1.8版本

compilerSourceVM - 与哪些JDK版本的源文件兼容? (默认值:1.8)

compilerTargetVM - 生成的文件与哪些JDK版本兼容? (默认值:1.8)

当然,如果默认值与您的要求不匹配,您可以更改使用的版本。

您可以通过修改全局org.apache.jasper.servlet.JspServlet中声明的$CATALINA_BASE/conf/web.xml servlet的init参数来实现。

例如,tomcat 8发行版的web.xml以这种方式定义了JspServlet:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
...

例如,要将1.8版本指定为JSP文件的源和目标,您应该以这种方式更改它:

...
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>  
     <!-- added params -->
    <init-param>
      <param-name>compilerSourceVM</param-name>
      <param-value>1.8</param-value>
    </init-param>
    <init-param>
      <param-name>compilerTargetVM</param-name>
      <param-value>1.8</param-value>
    </init-param>
     <!-- end added params -->
    <load-on-startup>3</load-on-startup>
</servlet>
...

0
投票

我们使用jdk8和tomcat6遇到了同样的问题。将值为1.8的compilerSourceVMcompilerTargetVM添加到conf / web.xml仍然无法在代码切换为字符串或lambda表达式时编译jsp。但是,从默认的lib替换ecj-4.3.1.jar与带有ecj-4.6.1.jar的tomcat 6.0.53(可以在maven存储库中找到),jsp将能够成功编译。

$ file ./work/Catalina/localhost/_/org/apache/jsp/test1_jsp.class
./work/Catalina/localhost/_/org/apache/jsp/test1_jsp.class: compiled Java class data, version 52.0 (Java 1.8)

希望这有助于任何坚持升级到jdk8 for tomcat6的人。


-1
投票

你有没有尝试将compilerSourceVM设置为1.7或7? (我担心我不能声称知道这是否有效)

© www.soinside.com 2019 - 2024. All rights reserved.