我正在使用一个简单的try-with-resources语句,如下所示:
try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"));){
//do stuff......
}
使用普通的javac
Ant任务进行编译很好,但是当我有Clover首先执行代码时,结果代码不再编译(请参阅下面的编译消息)。
According to the docs,这个版本的Clover确实支持Java 7.还有其他人遇到过这个问题或者知道问题是什么吗?
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
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"));){
答案 0 :(得分:1)
您的JDK版本 using optional trailing semicolon to terminate resources list in try-with-resources 似乎不允许使用it's illegal under JSR 334。
语法: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块和资源规范。此外,try语句允许具有这三个组件中的一个。 请注意,在资源规范中使用尾部分号是违法的。]
尝试删除最后一个分号:
try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"))){
//do stuff......
}