How to change tomcat compiler

后端 未结 5 1425
醉酒成梦
醉酒成梦 2020-12-10 03:03

I\'m trying to use the new Java 7 switch on strings feature.

But Tomcat is not cooperating.

I\'ve made sure that tomcat is running under java 7 but it seems

相关标签:
5条回答
  • 2020-12-10 03:29

    Have you tried setting compilerSourceVM to 1.7 or 7 ? (I'm afraid I cann't claim to know if this works or not)

    0 讨论(0)
  • 2020-12-10 03:41

    We are running Tomcat 6 and had the same problem. Our solution was to:

    • replace tomcat/lib/ecj-3.3.1.jar with ecj-3.7.2.jar (can be taken from the latest Tomcat 7 release);
    • add this to 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>
      

    The simpler alternative is, of course, to install Tomcat 7 but this might not be an option for everyone.

    0 讨论(0)
  • 2020-12-10 03:41

    We ran to the same problem, using jdk8 and tomcat6. Adding compilerSourceVM and compilerTargetVM with value of 1.8 to conf/web.xml will still not able to compile jsp when the code has switch with strings or lambda expression. However, replace ecj-4.3.1.jar from default lib come with tomcat 6.0.53 with ecj-4.6.1.jar (which can be found in maven repository), jsp will be able to compile successfully.

    $ 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)
    

    Hope this help anyone who stuck with upgrading to jdk8 for tomcat6.

    0 讨论(0)
  • 2020-12-10 03:41

    According to the Tomcat version used, the JSP engine provided by tomcat uses a specific default version of Java to compile and run JSP.

    Tomcat 7 uses the 1.6 version

    compilerSourceVM - What JDK version are the source files compatible with? (Default value: 1.6)

    compilerTargetVM - What JDK version are the generated files compatible with? (Default value: 1.6)

    Tomcat 8 uses the 1.7 version

    compilerSourceVM - What JDK version are the source files compatible with? (Default value: 1.7)

    compilerTargetVM - What JDK version are the generated files compatible with? (Default value: 1.7)

    Tomcat 9 uses the 1.8 version

    compilerSourceVM - What JDK version are the source files compatible with? (Default value: 1.8)

    compilerTargetVM - What JDK version are the generated files compatible with? (Default value: 1.8)

    Of course, you may change the versions used if the default values don't match to your requirements.

    You can do that by modifying the init parameters of the org.apache.jasper.servlet.JspServlet servlet declared in your global $CATALINA_BASE/conf/web.xml.

    For example the web.xml of the tomcat 8 distribution defined the JspServlet in this way :

    <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>
    ...
    

    For example to specify the 1.8 version both as source and target for JSP files, you should change it in this way :

    ...
    <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 讨论(0)
  • 2020-12-10 03:43

    Your mixing something here. You want your JSPs compile with Java 7 and not have the tomcat run with Java 7. Tomcat uses the Eclipse Java Compiler which is does not have Java 7 support yet.

    Edit: I did some digging. As you can see here, the built-in Eclipse compiler is used. The compiler distributed with Tomcat 7.0.19 is ECJ 3.7 which will support Java 7 not before 3.7.1.

    0 讨论(0)
提交回复
热议问题