12

我被一个遗留的 Java 代码库困住了,当你编译它时,它有成千上万的警告。我很想真正解决所有这些警告的来源,但不幸的是,目前在我的公司这不是一个选择(其他事情,比如“制造产生收入的新产品”被负责人认为是更高的优先级;想象一下) .

现在,我可以忍受所有这些警告,如果不是因为它们很难在我们的连续构建服务器的输出中找到实际错误。构建服务器只使用了一个 ant 调用,没什么特别的,但到目前为止,我还没有在任何地方找到任何关于如何修改这个调用以防止警告输出的东西。

浏览代码并在各处添加@SuppressWarnings 注释会起作用,但它也几乎与浏览并修复所有警告的来源一样痛苦。所以我真正喜欢的是,如果我能做一些事情:

<javadoc suppressWarrnings="true"

或类似的东西,使 javadoc 编译器不输出所有警告消息。这样的事情(全局javadoc警告禁用)可能吗?

4

6 回答 6

9

在 Java 8 中,您可以添加additionalparam="-Xdoclint:none"javadoc任务中。 (来源)

于 2015-03-26T17:24:25.473 回答
5

试试 -quiet 标志。

于 2009-03-06T22:59:30.390 回答
5

ant 任务和 javadoc 工具本身都无法全局禁用警告。

我能想到的一种可能的解决方法是将 javadoc 任务作为与构建的其余部分分开的 ant 调用运行。您可以使用 ant 的 -logfile 参数将输出重定向到日志文件而不是控制台。

于 2009-03-06T23:26:24.240 回答
4

如今,一些 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 意味着没有限制)

于 2016-06-27T20:07:58.737 回答
1

Mark 的回答对我来说听起来不错,并且可能对不使用 Cruise Control 持续构建系统的任何人都有效。但是,我发现对于任何(像我一样)使用该系统的人来说,还有另一种方法。

Cruise control 通过使用多个 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 来“折叠”警告而不是完全删除它们。

虽然我最终不得不自己发现这个解决方案,但这里的所有答案都帮助我理解了发生了什么,所以感谢大家的帮助。

于 2009-03-10T15:58:44.860 回答
0

我刚刚发现我在之前的回答中描述的内容有一个更好的变体。编辑 buildresults.xsl,而不是编辑 errors.xsl。该文件包含一条注释:

for traditional cc display of only compile errors and warnings
comment out mode="errors" and uncomment mode="compile" and mode="javadoc"

如果您遵循该评论的建议(注释掉它提到的两行并取消注释它提到的一行),您将获得相同的确切效果,但包含编译错误。

为什么要用这种方法而不是我以前的方法呢?好吧,我认为(我真的应该更好地测试这个,但我很懒)我以前的方法会吃编译错误;这种方法可以保留它们。

于 2009-03-10T22:16:06.717 回答