使用Jasper编译器(使用Tomcat)预编译JSP,然后使用Java编译器时,我看到javac
这样的警告(我启用了javac
的{{1}}标志) :
-Xlint
现在,它只是“警告”,但我喜欢干净的构建,所以我自然希望摆脱警告。当然,我可以关闭warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.List
_jspx_dependants.add("/some-jsp.jspf");
进行JSP编译,但-Xlint
是好东西,所以它会保留。
在此示例警告中,问题是未使用通用语法。我们只有-Xlint
而不是List<String>
。我意识到写好贾斯珀的好人必须迎合那些仍然被锁定在Java5之前世界的不幸的灵魂。那很好,但为什么我要遭受这些警告?
是否有一些众所周知的方法可以消除由Jasper JSP编译器创建的Java源代码引起的javac警告?我对IDE特定的解决方案不感兴趣(尽管那可能是某些使用特定IDE的人的部分解决方案。我正在寻找一个普遍适用的解决方案。
对Jasper源代码的扫描没有发现会导致通用语法发射的任何“Java 5+”开关。事实上,恰恰相反,我发现了这一点:
List
清楚地显示了硬编码的代码,无法注入优雅的通用语法。
答案 0 :(得分:1)
答案 1 :(得分: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<String> _jspx_dependants;"/>
<replacestring from="_jspx_dependants = new java.util.ArrayList"
to="_jspx_dependants = new java.util.ArrayList<String>"/>
<replaceregex pattern="public final class (.*) extends org.apache.jasper.runtime.HttpJspBase"
replace="@SuppressWarnings("serial")
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>
请参阅this question以了解“双重移动”。