12

コンパイル時に何千もの警告が表示されるレガシーJavaコードベースで立ち往生しています。これらすべての警告の原因を実際に修正したいと思いますが、残念ながら、現時点ではそれは私の会社の選択肢ではありません(「収益を生み出す新製品を作る」などの他のことは、担当者によって優先度が高いと考えられています。 。

これで、継続的ビルドサーバーからの出力で実際のエラーを見つけるのが困難になるという事実がなければ、これらすべての警告に耐えることができました。ビルドサーバーはant呼び出しを使用するだけで、特別なことは何もありませんが、これまでのところ、警告出力を防ぐためにこの呼び出しを変更する方法については何も見つかりませんでした。

コードを調べて@SuppressWarningsアノテーションをどこにでも追加することは機能しますが、すべての警告のソースを調べて修正するのとほぼ同じくらいの苦痛も伴います。だから私が本当に好きなのは、私にできる方法があったかどうかです。

<javadoc suppressWarrnings="true"

または同様のもので、javadocコンパイラがすべての警告メッセージを出力しないようにします。このようなもの(グローバルjavadoc警告の無効化)は可能ですか?

4

6 に答える 6

5

Ant タスクと javadoc ツール自体には、警告をグローバルに無効にする方法がありません。

考えられる回避策の 1 つは、ビルドの残りの部分とは別の ant 呼び出しとして javadoc タスクを実行することです。-logfile 引数を ant に使用して、出力をコンソールではなくログ ファイルにリダイレクトできます。

于 2009-03-06T23:26:24.240 に答える
5

-quiet フラグを試してください。

于 2009-03-06T22:59:30.390 に答える
4

現在、一部の javadoc 非標準オプションを使用すると、過剰な数のエラーや警告を回避できます。javadoc のヘルプを確認します (javadoc -X を実行)。次の非標準オプションを使用できる必要があります。

-Xmaxerrs <number>
-Xmaxwarns <number>              
-Xdoclint:(all|none|[-]<group>)

-Xmaxerrs出力するエラーの最大数を -Xmaxwarns設定します 出力する警告の最大数を設定します -Xdoclintjavadoc コメントの問題に対する特定のチェックを有効または無効にします。

たとえば、次のように指定する-Xdoclint:noneと、javadoc コメントのほとんどの問題に対する特定のチェックが無効になります。警告の数を-Xmaxwarns 11に制限します(試してみまし-Xmaxwarns 0たが、すべての警告が出力されたので、0は制限がないことを意味すると思います)

于 2016-06-27T20:07:58.737 に答える
1

マークの答えは私には良さそうですし、CruiseControl継続的ビルドシステムを使用していない人にとってはおそらくうまくいくでしょう。しかし、(私のように)そのシステムを使用している人には、別の方法があることを発見しました。

Cruise controlは、いくつかのXSLTスタイルシートを使用してレポートを作成します。私たちの場合、これらのスタイルシートは次の場所にあります。

~/applications/cruisecontrol-bin-2.7.3/webapps/cruisecontrol/xsl

しかし、インストールをセットアップしなかったので、それが標準パスであるかどうかはわかりません。とにかく、インストールで同等のディレクトリを見つけることができるはずです。そのディレクトリ内には、errors.xslというファイルがあります。警告を取り除くには、そのファイルに2つの変更を加える必要があります。どちらも、既存のルールをコメントアウトする必要があります。

交換:

<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

以前の回答で説明したものよりもわずかに優れたバリアントがあることを発見しました。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"

そのコメントのアドバイスに従うと (言及されている 2 行をコメントアウトし、言及されている 1 行のコメントを外します)、まったく同じ効果が得られますが、コンパイル エラーが含まれます。

以前の方法よりもこの方法を気にするのはなぜですか? ええと、以前の方法ではコンパイル エラーが発生したと思います (実際にはこれをもっとよくテストする必要がありましたが、怠惰になりました)。このメソッドはそれらを保持します。

于 2009-03-10T22:16:06.717 に答える