2016-07-03 4 views
1

Перенос приложения на основе Jetty 6 до 9.2 (встроенный).Jetty 9 (emedded) JSP-компиляция во время выполнения

Я не могу понять, как именно JSPs скомпилированы во время выполнения (без предварительной компиляции). Мое приложение работает нормально, когда я использую JDK. Но он не может служить JSP при запуске в JRE, то ошибка, я получаю:

org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required 
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92) 
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378) 
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:119) 
    at org.apache.jasper.compiler.Jsr199JavaCompiler.compile(Jsr199JavaCompiler.java:208) 
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:384) 
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453) 

который ясно показывает, что Jetty ищет Java компилятор, который явно не присутствует в JRE. Глядя в Jetty 9.2 Документов я прочитал, что:

By default, the Apache JSP container will look for the Eclipse Java Compiler (jdt).

У меня есть пристань-Jdt-JSP-2.3.3.jar в пути к классам, но по какой-то причине, Jetty, кажется, игнорировать его.

Итак, мой вопрос: как настроить встроенный Jetty без предварительного компиляции JSP и возможности запуска в JRE. Это, по сути, то, что мое приложение в Jetty 6 делало с помощью встроенного компилятора jasper. Возможно ли это с Jetty 9.2?

+0

Проект github, демонстрирующий Jetty 9, встроенный в JSP (поддерживается проектом Jetty) -> https://github.com/jetty-project/embedded-jetty-jsp –

ответ

0

На самом деле я нашел решение этой проблемы просто делать:

System.setProperty("org.apache.jasper.compiler.disablejsr199", "true"); 

Это сделало приложение со встроенным Jetty 9.2 бежать счастливо в JRE. См. this для справки.

+1

Примечание: это свойство больше недействительно в Jetty 9.3+. (Проект Jetty бросил вызов Glassfish Jasper и перешел на официальный Apache Jasper, который не имеет этого свойства) –

+0

@Joakim - это означает, что Jetty 9.3+ полностью зависит от запуска JDK? – Dima

+0

Jetty 9.3+ использует Apache Jasper 8.0, который отлично работает с компиляторами jsr199 (например, ECJ) и с обычным JDK. Я просто говорю, что System Property 'org.apache.jasper.compiler.disablejsr199' больше не имеет смысла для Apache Jasper (он не использует это свойство System) –

Смежные вопросы