Как изменить компилятор tomcat

Я пытаюсь использовать новую функцию перехода на Java 7.

Но Tomcat не сотрудничает.

Я убедился, что tomcat работает под java 7, но кажется, что он не компилируется под ним.

Я добавил следующее в файл web.xml в записи сервлета jsp

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

но, похоже, это не трюк.

Любые советы будут оценены.

Ответы

Ответ 1

Мы работаем с 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, но это может быть не вариант для всех.

Ответ 2

Ваше смешение здесь. Вы хотите, чтобы ваши JSPs компилировались с помощью Java 7 и не выполняли tomcat с Java 7. Tomcat использует компилятор Java Eclipse, который еще не поддерживает Java 7.

Редактирование: я сделал рытье. Как вы видите здесь, используется встроенный компилятор Eclipse. Компилятор, распространенный с Tomcat 7.0.19, является ECJ 3.7, который будет поддерживать Java 7 не раньше 3.7.1.

Ответ 3

В соответствии с используемой версией Tomcat механизм JSP, предоставленный tomcat, использует определенную версию 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)

Конечно, вы можете изменить используемые версии, если значения по умолчанию не соответствуют вашим требованиям.

Это можно сделать, изменив параметры init org.apache.jasper.servlet.JspServlet объявлен сервлет в вашем глобальном $CATALINA_BASE/conf/web.xml.

Например, web.xml дистрибутива tomcat 8 определил 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>
...

Ответ 4

Вы пытались настроить compilerSourceVM на 1.7 или 7? (Боюсь, я не могу утверждать, что это работает или нет)