Для загрузки jsps с предварительно скомпилированными причалами по-прежнему требуется jdk?

Я пытаюсь использовать пристань с JRE, а не с JDK. Я подумал, что если я предварительно скомпилирую jsps и помещу полученные файлы классов в путь к классам, пристани не нужно будет пытаться скомпилировать jsp, когда браузер запрашивает его, но я получаю

org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. 
A full JDK (not just JRE) is required

независимо от того, что я делаю, когда запрашиваю jsp из браузера.

У меня есть эти параметры инициализации в моем файле webdefault.xml, и файлы встроенных классов определенно находятся в пути к классам.

   <init-param>
        <param-name>reloading</param-name>
        <param-value>false</param-value>
   </init-param>
   <init-param>
        <param-name>development</param-name>
        <param-value>false</param-value>
   </init-param>
   <init-param>
        <param-name>classpath</param-name>
        <param-value>c:/project/build/classes</param-value>
   </init-param>

Как мне заставить причал не пытаться снова скомпилировать jsp, чтобы я мог запустить его с помощью jre, а не jdk?


person stu    schedule 21.02.2014    source источник
comment
Возможно, их нужно скомпилировать, чтобы использовать какие-то специфические для причала вещи. Различные контейнеры сервлетов используют разные способы реализации API. stackoverflow.com/ вопросы/11735628/   -  person developerwjk    schedule 22.02.2014
comment
ну, я скомпилировал его с тем же классом jspc, который использует сам причал. Что еще может быть другим?   -  person stu    schedule 23.02.2014


Ответы (1)


После борьбы с предварительной компиляцией JSP для Jetty, работающей на JRE, я обнаружил, что предварительная компиляция не нужна. Jetty (7.5.5 и более поздние версии) поставляется с компилятором, который можно использовать для компиляции JSP, когда Jetty запускается с использованием JRE. Подробности можно узнать на этой странице:

https://wiki.eclipse.org/Jetty/Howto/Configure_JSP#Compiling_JSPs

Короче говоря, либо добавьте следующий фрагмент в jetty.xml:

<Call class="java.lang.System"  name="setProperty">
  <Arg>org.apache.jasper.compiler.disablejsr199</Arg>
  <Arg>true</Arg>
</Call>

или эту строку в start.ini:

-Dorg.apache.jasper.compiler.disablejsr199=true
person Paul    schedule 18.04.2014
comment
В конце концов я тоже это понял (я не включил org.eclipse.jdt.core-3.7.1.jar, где находится компилятор, поэтому мне потребовалось некоторое время, чтобы заставить его работать. Проблема, с которой я столкнулся сейчас, заключается в том, что на android jetty не работает, потому что даже если вы его скомпилируете, его нечем будет преобразовать в dalvik.Так что снова можно было бы использовать предварительно скомпилированные jsps, но джетти отказывается их подбирать. - person stu; 20.04.2014
comment
Единственное, о чем я могу думать, это неправильные сопоставления в web.xml - это то, что отправляет запросы на jsps в скомпилированный код. В конечном счете то, что вы пытаетесь сделать, это не что иное, как сопоставление шаблона с сервлетом. Попробуйте вручную создать запись в web.xml, которая сопоставляет конечную точку (например, /test) с классом, созданным JspC. Я бы повозился с пустым веб-приложением, чтобы исключить возможность того, что в коде происходит что-то еще. - person Paul; 22.04.2014