简体   繁体   English

Java 7的try-with-resources的Clover检测后,编译失败

[英]Compilation fails after Clover instrumentation of Java 7 try-with-resources

I am using a simple try-with-resources statement like the following: 我正在使用一个简单的try-with-resources语句,如下所示:

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

It compiles fine using a normal javac Ant task, but when I have Clover instrument the code first, the resultant code no longer compiles (see the compilation message included below). 使用普通的javac Ant任务可以很好地进行编译,但是当我首先使用Clover工具编写代码时,结果代码将不再编译(请参见下面的编译消息)。

According to the docs , this version of Clover does support Java 7. Has anyone else run across this issue or have any idea what the problem is? 根据文档 ,此版本的Clover确实支持Java7。是否有人遇到过此问题,或者是否知道问题是什么?

Java version: Java版本:

java version "1.7.0"
Java(TM) SE Runtime Environment (build pxi3270-20110827_01)
IBM J9 VM (build 2.6, JRE 1.7.0 Linux x86-32 20110810_88604 (JIT enabled, AOT enabled)
J9VM - R26_Java726_GA_20110810_1208_B88592
JIT  - r11_20110810_20466
GC   - R26_Java726_GA_20110810_1208_B88592
J9CL - 20110810_88604)
JCL - 20110809_01 based on Oracle 7b147

Output of Ant task: Ant任务的输出:

compile:
     [echo] Compiling source code...
    [javac] Compiling 135 source files to /home/*********/WEB-INF/classes
   [clover] Clover Version 3.1.2, built on November 07 2011 (build-842)
   [clover] Loaded from: /home/*******/clover.jar
   [clover] Clover: Commercial License registered to *******.
   [clover] Updating existing database at '/home/********/dist/clover/clover.db'.
   [clover] Processing files at 1.7 source level.
   [clover] Clover all over. Instrumented 135 files (12 packages).
   [clover] Elapsed time = 1.597 secs. (84.534 files/sec, 12,463.369 srclines/sec)
    [javac] /tmp/clover2218935617827048125.tmp/com/****/web/DownloadService.java:232: error: illegal start of type
    [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"));){

It seems that using optional trailing semicolon to terminate resources list in try-with-resources is not allowed with your JDK version, it's illegal under JSR 334 . 似乎您的JDK版本不允许使用可选的尾部分号来终止try-with-resources中的资源列表这在JSR 334中是非法的

Check this documentation : 查看此文档

SYNTAX: The existing set of grammar productions for TryStatement in JLS §14.20 is augmented with: 语法: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 

[An implication of the combined grammar is that a try statement must have at least one of a catch clause, a finally block, and a resource specification. [组合语法的含义是,try语句必须至少具有catch子句,finally块和资源规范中的一个。 Furthermore, it is permissible for a try statement to have exactly one of these three components. 此外,允许try语句恰好具有这三个组成部分之一。 Note that it is illegal to have a trailing semi-colon in the resource specification .] 请注意,在资源规范中使用尾部分号是非法的 。]

Try to drop the last semicolon : 尝试删除最后一个分号:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM