1

次のような単純なtry-with-resourcesステートメントを使用しています。

try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"));){
    //do stuff......
}

通常のAntタスクを使用して正常にコンパイルされますjavacが、Cloverに最初にコードをインストルメントさせると、結果のコードはコンパイルされなくなります(以下に含まれるコンパイルメッセージを参照してください)。

ドキュメントによると、このバージョンのCloverはJava 7をサポートしています。他の誰かがこの問題に遭遇したり、問題が何であるかを知っていますか?

Javaバージョン:

Javaバージョン「1.7.0」
Java(TM)SEランタイム環境(ビルドpxi3270-20110827_01)
IBM J9 VM(ビルド2.6、JRE 1.7.0 Linux x86-32 20110810_88604(JITが有効、AOTが有効)
J9VM-R26_Java726_GA_20110810_1208_B88592
JIT-r11_20110810_20466
GC-R26_Java726_GA_20110810_1208_B88592
J9CL-20110810_88604)
JCL-Oracle7b147に基づく20110809_01

Antタスクの出力:

コンパイル:
     [エコー]ソースコードをコンパイルしています...
    [javac]135のソースファイルを/home/ ********* / WEB-INF/classesにコンパイルします
   [クローバー]2011年11月7日にビルドされたクローバーバージョン3.1.2(build-842)
   [クローバー]ロード元:/home/*******/clover.jar
   [クローバー]クローバー:*******に登録された商用ライセンス。
   [clover]'/home/********/dist/clover/clover.db'にある既存のデータベースを更新しています。
   [クローバー]1.7ソースレベルでファイルを処理しています。
   [クローバー]クローバーがいたるところに。インストルメント化された135ファイル(12パッケージ)。
   [クローバー]経過時間=1.597秒。(84.534ファイル/秒、12,463.369 srclines /秒)
    [javac] /tmp/clover2218935617827048125.tmp/com/****/web/DownloadService.java:232:エラー:タイプの開始が不正です
    [javac] __CLR3_1_24ae4aegwpi0zhh.R.inc(5592); try(new java.lang.AutoCloseable(){{__ CLR3_1_24ae4aegwpi0zhh.R.inc(5593);} public void close(){}}; CSVWriter w = new CSVWriter(new OutputStreamWriter(response.getOutputStream()、 "UTF-8"));){
4

1 に答える 1

1

try-with-resourcesでリソースリストを終了するためにオプションの末尾のセミコロンを使用することは、JDKバージョンでは許可されていないようです。JSR334では違法です。

このドキュメントを確認してください:

構文:JLS§14.20のTryStatementの既存の文法生成セットは、次のように拡張されています。

TryStatement:
    try ResourceSpecification Block Catchesopt Finallyopt 

Supporting new grammar productions are added:

ResourceSpecification:
    ( Resources ) 
Resources:
    Resource 
    Resource ; Resources 
Resource:
    VariableModifiers Type VariableDeclaratorId = Expression 
    Expression 

[結合された文法の意味するところは、tryステートメントにはcatch節、finallyブロック、およびリソース指定の少なくとも1つが必要であるということです。さらに、tryステートメントがこれらの3つのコンポーネントの1つだけを持つことは許容されます。リソース仕様に末尾のセミコロンを含めることは違法であることに注意してください。]

最後のセミコロンを削除してみてください:

try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"))){
//do stuff......
}
于 2012-06-14T13:25:37.163 に答える