2011-07-21 72 views
14

我正在嘗試在字符串功能上使用新的Java 7開關。如何更改tomcat編譯器

但Tomcat不合作。

我已經確定tomcat運行在java 7下,但它似乎沒有在它下編譯。

我已經添加下面的web.xml文件中,JSP servlet的條目

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

下,但它似乎並沒有這樣的伎倆。

任何提示將不勝感激。

回答

11

我們正在運行Tomcat 6並且有同樣的問題。我們的解決方案是:

  • 取代tomcat/lib/ecj-3.3.1.jarecj-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

太棒了。 最後,我們能夠升級到Tomcat 7,但它看起來像你的解決方案會取得訣竅。 –

+0

您也可以將它添加到您的應用程序的'web.inf'中。 –

-1

您是否嘗試將compilerSourceVM設置爲1.7或7? (恐怕我不能聲稱知道這是否有效)

+0

喬爾,感謝您的答覆,但它沒有工作:( 我同時設置compilerSourceVM和compilerTargetVM,與1.7和7個嘗試,得到了相同的結果 –

0

你在這裏混合的東西。您希望您的JSP使用Java 7進行編譯,而不是使用Java 7運行tomcat。Tomcat使用尚未支持Java 7的Eclipse Java編譯器。

編輯:我做了一些挖掘。正如你可以看到here,使用內置的Eclipse編譯器。隨Tomcat 7.0.19發佈的編譯器是ECJ 3.7,它將在3.7.1之前支持Java 7。

+0

Michael-O。我試圖讓*所有*在Java 7上運行/編譯。 我已經有7個運行Tomcat,我只是缺少編譯能力。這就是爲什麼我正在尋找一種方法來擺脫默認的編譯器。 –

+0

您應該聯繫tomcat用戶郵件列表。馬克托馬斯對此非常積極。 –

0

根據所使用的Tomcat版本,由tomcat提供的JSP引擎使用特定的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)

當然,如果默認值與您的要求不符,您可以更改使用的版本。

你可以通過在全局$CATALINA_BASE/conf/web.xml修改申報 的 org.apache.jasper.servlet.JspServlet Servlet的初始化參數。

<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文件,你應該改變它在此:

例如tomcat的8分佈web.xml以這種方式定義的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> 
    <!-- 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> 
...