2

Jasper コンパイラ (Tomcat を使用) で JSP をプリコンパイルし、次に Java コンパイラでプリコンパイルすると、次のような警告が表示さjavacれます (フラグが有効になっています)。javac-Xlint

warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.List
_jspx_dependants.add("/some-jsp.jspf");

さて、「ただの警告」ですが、私はクリーンビルドが好きなので、当然警告をなくしたいと思っています。確かに、-XlintJSP コンパイルをオフにすることもできますが、これ-Xlintは良いことなのでそのままにします。

この警告の例では、一般的な構文が使用されていないことが問題です。の代わりにList<String>、 しかありませんList。Jasper を書いている善良な人々は、Java5 以前の世界に閉じ込められたままの不幸な魂に対応しなければならないことを理解しています。それは問題ありませんが、なぜこれらの警告に苦しむ必要があるのでしょうか?

Jasper JSP コンパイラーによって作成された Java ソース・コードによって引き起こされる javac 警告を除去するよく知られた方法はありますか? 私は IDE 固有のソリューションには興味がありません (ただし、特定の IDE を使用する一部の人々にとっては部分的なソリューションになります)。一般的に適用可能なソリューションを探しています。

Jasper のソース コードをスキャンしても、汎用構文の発行を引き起こす「Java 5+」スイッチは見つかりませんでした。実際、逆に私はこれを見つけました:

apache-tomcat-6.0.18-src/java/org/apache/jasper/compiler/Generator.java:494:            out.printin("_jspx_dependants = new java.util.ArrayList(");

これは、ハードコードされたコードがエレガントなジェネリック構文の注入の希望を失っていることを明確に示しています。

4

2 に答える 2

1

そこにあることがわかっていて気にしない警告を無効にします。

-Xlint:-xxx
警告 xxx を無効にします。xxx は、以下の -Xlint:xxx でサポートされている警告名の 1 つです。

ここを参照してください。

于 2009-04-22T21:09:53.563 に答える
0

Ant ベースのビルドを使用しています。この問題に対する私の現在の解決策は、次の Ant フィルタリング コードを使用して、問題のある Jasper によって生成された Java コードをその場で編集することです。

<move todir="WEB-INF/src">
    <fileset dir="WEB-INF/src"/>
    <globmapper from="*.java"
                to="*.java.foo"/>
    <filterchain>
        <tokenfilter>
            <replacestring from="private static java.util.List _jspx_dependants;"
                           to="private static java.util.List&lt;String&gt; _jspx_dependants;"/>
            <replacestring from="_jspx_dependants = new java.util.ArrayList"
                           to="_jspx_dependants = new java.util.ArrayList&lt;String&gt;"/>
            <replaceregex pattern="public final class (.*) extends org.apache.jasper.runtime.HttpJspBase"
                          replace="@SuppressWarnings(&quot;serial&quot;)&#xA;public final class \1 extends org.apache.jasper.runtime.HttpJspBase"/>
            <replacestring from="(PageContext)_jspx_page_context"
                           to="_jspx_page_context"/>
        </tokenfilter>
    </filterchain>
</move>
<move todir="WEB-INF/src" overwrite="true">
    <fileset dir="WEB-INF/src"/>
    <globmapper from="*.java.foo" to="*.java"/>
</move>

「ダブルムーブ」を理解するには、この質問を参照してください。

于 2009-04-22T21:10:10.880 に答える