2

当使用 Jasper 编译器(使用 Tomcat)和 Java 编译器预编译 JSP 时,我看到javac这样的警告(我启用了javac's-Xlint标志):

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

现在,它“只是一个警告”,但我喜欢干净的构建,所以我自然想摆脱警告。当然,我可以-Xlint关闭 JSP 编译,但这-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 支持的警告名称之一。

这里

于 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 回答