Java 如何在Eclipse中生成自定义编译器警告?

Java 如何在Eclipse中生成自定义编译器警告?,java,eclipse,compiler-warnings,suppress-warnings,bonecp,Java,Eclipse,Compiler Warnings,Suppress Warnings,Bonecp,我正在尝试将其作为DBCP的连接池替代方案。我将bonecp-0.8.0rc-1.jar添加到我的运行时类路径中,并将代码从示例页面复制粘贴到我的测试驱动程序中: Connection connection = null; BoneCP connectionPool; try { Class.forName(config.getDatabaseLogger().getJDBCDriver()); BoneCPConfig boneConfig = configureBoneCP

我正在尝试将其作为DBCP的连接池替代方案。我将
bonecp-0.8.0rc-1.jar
添加到我的运行时类路径中,并将代码从示例页面复制粘贴到我的测试驱动程序中:

Connection connection = null;
BoneCP connectionPool;
try {
    Class.forName(config.getDatabaseLogger().getJDBCDriver());

    BoneCPConfig boneConfig = configureBoneCP(config);

    connectionPool = new BoneCP(boneConfig);

    connection = connectionPool.getConnection();    // fetch a connection
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
在一行中,内容如下:

connectionPool = new BoneCP(boneConfig);
Eclipse(Juno)给了我一个编译器警告:

资源泄漏:“connectionPool”从未关闭

然后它给了我一个选项“将@SuppressWarnings'resource'添加到newConnectionManager”(
newConnectionManager()
引用了其中包含的类)

这怎么可能Eclipse如何知道关于
BoneCP
对象的任何信息,以及它如何知道它必须关闭?这是BoneCP库附带的某种“自定义警告”吗?如果是这样,我如何向自己的项目添加/注释代码,以帮助警告下游开发人员他们没有正确使用我的库?提前谢谢

How does Eclipse know anything about a BoneCP object, 
                                  and how does it know that it must be closed?

实现接口java.io.Closeable(自JDK 1.5起)和java.lang.AutoCloseable(自JDK 1.7起)的类被视为表示外部资源,当不再需要它们时,应该使用方法close()关闭它们

EclipseJava编译器能够分析使用此类类型的代码是否遵守此策略

对象不直接表示操作系统资源。如果包装的资源已关闭,则包装器不需要关闭。相反,如果包装器被关闭,这将包括关闭包装的资源。该分析还有第二个白名单用于检测包装器资源,并将识别底层实际资源是否将通过包装器直接或间接关闭。任何一个都足以消除有关资源泄漏的警告白名单包含java.io、java.util.zip、java.security、java.beans和java.sound.sampled中的类


您的BoneCP类实现了接口java.io.Serializable,这可能就是原因。

警告是由以下语句引起的:

connection = connectionPool.getConnection();

方法
getConnection()
返回自Java 7以来实现的类型的对象。当Eclipse无法确定实现
java.io.Closeable
java.lang.AutoCloseable
的资源是否被所有可能的代码路径关闭时,会生成此警告

你有用于BoneCp的Javadoc吗?我做了同样的事情,但我无法复制它。没有实现这些接口。但是没有实现它们中的任何一个?关于
Connection
interface呢?它有一个方法close()…怎么样?…但是警告出现在
BoneCP
实例(连接池)上,而不是
java.sql.Connection
实例上@Baadshah在那里读到了下面一行:如果一个方法将一个资源返回给它的调用者,它不负责关闭;没有报告任何问题。:)