Как изменить компилятор Tomcat - PullRequest
15 голосов
/ 21 июля 2011

Я пытаюсь использовать новую функцию переключателя 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>

но, похоже, это не сработало.

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

Ответы [ 5 ]

11 голосов
/ 04 августа 2012

У нас запущен 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 голосов
/ 27 февраля 2019

Мы столкнулись с той же проблемой, используя jdk8 и tomcat6. Добавление compilerSourceVM и compilerTargetVM со значением 1,8 в conf / web.xml по-прежнему не сможет скомпилировать jsp, если код имеет переключатель со строками или лямбда-выражением. Однако замените ecj-4.3.1.jar из библиотеки по умолчанию, поставляемой с tomcat 6.0.53, на ecj-4.6.1.jar (который можно найти в репозитории 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 для tomcat6.

0 голосов
/ 23 ноября 2017

В соответствии с используемой версией 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)

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

Это можно сделать с помощьюизменив параметры инициализации сервлета 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>
...
0 голосов
/ 24 июля 2011

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

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

0 голосов
/ 21 июля 2011

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

...