15

新しいJava7スイッチオン文字列機能を使用しようとしています。

しかし、Tomcatは協力していません。

tomcatがjava7で実行されていることを確認しましたが、その下でコンパイルされていないようです。

jspサーブレットエントリの下のweb.xmlファイルに以下を追加しました

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

しかし、それはうまくいかないようです。

ヒントをいただければ幸いです。

4

5 に答える 5

12

Tomcat 6を実行していますが、同じ問題が発生しました。私たちの解決策は次のとおりです。

  • 置換(最新tomcat/lib/ecj-3.3.1.jarecj-3.7.2.jarTomcat 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をインストールすることですが、これはすべての人にとってオプションではないかもしれません。

于 2012-08-04T16:01:35.953 に答える
2

jdk8とtomcat6を使用して、同じ問題が発生しました。コードに文字列またはラムダ式のスイッチがある場合、conf / web.xmlに値1.8を追加compilerSourceVMcompilerTargetVMても、jspをコンパイルできません。ただし、tomcat 6.0.53に付属しているデフォルトのlibのecj-4.3.1.jarを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)

これがtomcat6のjdk8へのアップグレードにこだわった人に役立つことを願っています。

于 2019-02-27T06:08:34.347 に答える
0

ここで何かを混ぜます。JSPをJava7でコンパイルし、tomcatをJava 7で実行しないようにする必要があります。Tomcatは、Java7をまだサポートしていないEclipseJavaコンパイラを使用します。

編集:私はいくつかの掘り下げをしました。ご覧のとおり、組み込みのEclipseコンパイラーが使用されていますTomcat 7.0.19で配布されるコンパイラは、3.7.1より前ではないJava7をサポートするECJ3.7です。

于 2011-07-23T22:46:10.127 に答える
0

使用されているTomcatのバージョンによると、tomcatが提供するJSPエンジンは、特定のデフォルトバージョンのJavaを使用してJSPをコンパイルおよび実行します。

Tomcat7は1.6バージョンを使用します

compilerSourceVM-ソースファイルと互換性のあるJDKのバージョンは何ですか?(デフォルト値:1.6)

compilerTargetVM-生成されたファイルはどのJDKバージョンと互換性がありますか?(デフォルト値:1.6)

Tomcat8は1.7バージョンを使用します

compilerSourceVM-ソースファイルと互換性のあるJDKのバージョンは何ですか?(デフォルト値:1.7)

compilerTargetVM-生成されたファイルはどのJDKバージョンと互換性がありますか?(デフォルト値:1.7)

Tomcat9は1.8バージョンを使用します

compilerSourceVM-ソースファイルと互換性のあるJDKのバージョンは何ですか?(デフォルト値:1.8)

compilerTargetVM-生成されたファイルはどのJDKバージョンと互換性がありますか?(デフォルト値:1.8)

もちろん、デフォルト値が要件に一致しない場合は、使用するバージョンを変更できます。

org.apache.jasper.servlet.JspServletこれを行うには、グローバルで宣言されたサーブレットのinitパラメータを変更し ます$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>
...
于 2017-11-23T18:29:27.963 に答える
-1

compilerSourceVMを1.7または7に設定してみましたか?(これが機能するかどうかを知ることはできません)

于 2011-07-21T19:42:08.093 に答える