2014-02-21 68 views
2

我正在嘗試使用JRE而不是JDK的jetty。我想如果我預編譯的JSP,並把所產生的類文件的類路徑,應該沒有必要碼頭,試圖當瀏覽器請求它編譯JSP,但我得到加載與預編譯的碼頭jsps仍然需要jdk?

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

不管我當我從瀏覽器請求jsp時。

我在webdefault.xml有這些初始化參數和內置的類文件肯定是在classpath

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

+0

也許他們必須編譯使用一些碼頭特定的東西。不同的servlet容器使用不同的方式來實現API。 http://stackoverflow.com/questions/11735628/precompile-jsps-into-classes-for-jetty8-using-ant – developerwjk

+0

以及我編譯它與jetty本身使用相同的jspc類。還有什麼可以不同? – stu

回答

2

在JRE上運行用於Jetty的預編譯JSP之後,我發現預編譯不是必需的。 Jetty(7.5.5和更高版本)附帶一個編譯器,當Jetty使用JRE運行時,該編譯器可用於編譯JSP。細節可以在此頁面上找到:

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 
+0

我最終也想到了這一點(我沒有在編譯器中包含org.eclipse.jdt.core-3.7.1.jar,所以花了我一段時間才搞定它。現在我遇到的問題是在android jetty上不起作用,因爲即使你編譯它,也沒有任何東西可以將它轉換爲dalvik。所以再次預編譯的jsps將是要走的路,但是jetty拒絕接受。 – stu

+1

我唯一能想到的在web.xml中,映射是不正確的 - 這些都是將jsps的請求發送給編譯後的代碼。最終,你要做的只不過是將模式映射到servlet。在web.xml中將一個端點(例如/ test)映射到由JspC創建的類,我會修改一個空的web應用程序,以消除代碼中可能出現的其他問題。 – Paul