我遇到了遗留的Java代码库,它在编译时会发出数千条警告。我很想真正解决所有这些警告的来源,但遗憾的是,此时我的公司不是一个选择(其他诸如“制造产生收入的新产品”被负责人认为是更优先考虑的事情;看中那个)
现在,我可以忍受所有这些警告,如果不是因为它们很难在我们的连续构建服务器的输出中找到实际错误。构建服务器只使用一个蚂蚁调用,没什么特别的,但到目前为止,我无法在任何地方找到任何可以修改此调用以防止警告输出的内容。
遍历代码并在任何地方添加@SuppressWarnings注释都会有效,但这也几乎与修复所有警告来源一样痛苦。所以我真正喜欢的是,如果只有某种方式我可以做到:
<javadoc suppressWarrnings="true"
或类似的东西,使javadoc编译器不输出所有警告消息。是否可以这样(全局javadoc警告禁用)?
答案 0 :(得分:8)
在Java 8中,您可以将additionalparam="-Xdoclint:none"
添加到javadoc
任务中。 (Source)
答案 1 :(得分:6)
尝试使用-quiet标志。
答案 2 :(得分:5)
ant任务和javadoc工具本身无法全局禁用警告。
我能想到的一个可能的解决方法是将javadoc任务作为来自其余构建的单独ant调用运行。您可以使用-logfile参数来将输出重定向到日志文件而不是控制台。
答案 3 :(得分:2)
如今,一些javadoc非标准选项可以避免过多的错误和/或警告。检查javadoc的帮助(执行javadoc -X);应提供以下非标准选项:
-Xmaxerrs <number>
-Xmaxwarns <number>
-Xdoclint:(all|none|[-]<group>)
-Xmaxerrs
设置要打印的最大错误数
-Xmaxwarns
设置要打印的最大警告数
-Xdoclint
启用或禁用对javadoc注释中的问题的特定检查。
例如,指定-Xdoclint:none
将禁用javadoc注释中大多数问题的特定检查;并且-Xmaxwarns 1
会将警告的数量限制为1(我尝试了-Xmaxwarns 0
,但随后它打印了所有警告,所以我的猜测是0意味着没有限制)
答案 4 :(得分:1)
Mark的答案对我来说听起来不错,而且对于没有使用Cruise Control连续构建系统的人来说,这可能会很有用。但是,我发现,对于那些(像我一样)使用该系统的人来说,还有另一种方式。
Cruise控件通过使用多个XSLT样式表来组装其报告。在我们的例子中,这些样式表位于:
~/applications/cruisecontrol-bin-2.7.3/webapps/cruisecontrol/xsl
但由于我没有设置我们的安装,我不知道这是否是标准路径。无论如何,您应该能够在安装中找到等效目录。在该目录中是一个名为errors.xsl的文件。要消除警告,您需要对该文件进行两处更改,这两项更改都涉及评论现有规则。
替换:
<xsl:variable name="total.errorMessage.count" select="count($warn.messages) + count($error.messages)"/>
使用:
<!-- <xsl:variable name="total.errorMessage.count" select="count($warn.messages) + count($error.messages)"/>-->
<xsl:variable name="total.errorMessage.count" select="count($error.messages)"/>
这将使“错误计数”成为实际错误的计数,而不是错误计数+警告。
然后,替换:
<xsl:template match="message[@priority='warn']" mode="errors">
<xsl:if test="not(starts-with(text(),'cvs update'))">
<xsl:value-of select="text()"/><br class="none"/>
</xsl:if>
</xsl:template>
使用:
<!--<xsl:template match="message[@priority='warn']" mode="errors">
<xsl:if test="not(starts-with(text(),'cvs update'))">
<xsl:value-of select="text()"/><br class="none"/>
</xsl:if>
</xsl:template>-->
这将隐藏实际警告本身。或者你总是可以删除注释掉的代码,但是你应该首先备份文件,以防你想要收回警告。此外,XSLT忽略任何非XSLT标记,因此除了完全消除它们之外,您还可以使用警告执行其他操作:例如,您可以将所有警告包装在DIV中,然后使用CSS / Javascript来“崩溃”警告而不是完全删除它们。
虽然我最终必须自己发现这个解决方案,但这里的所有答案都帮助我理解了发生了什么,所以感谢大家的帮助。
答案 5 :(得分:0)
我刚刚发现我在之前的回答中描述了一个稍好的变体。而不是编辑errors.xsl,编辑buildresults.xsl。该文件包含注释:
for traditional cc display of only compile errors and warnings
comment out mode="errors" and uncomment mode="compile" and mode="javadoc"
如果您遵循该评论的建议(注释掉它提到的两行并取消注释它提到的一行),您将获得相同的确切效果,但包含编译错误。
为什么要比以前的方法更麻烦?好吧,我认为(我真的应该更好地测试这个,但我很懒)我以前的方法会吃掉编译错误;这种方法可以保留它们。