在Eclipse Checkstyle插件中解决“allowThrowsTagsForSubclasses”问题

时间:2013-06-22 17:53:59

标签: java eclipse checkstyle

在我的javadoc评论中,我经常对异常的子类提出@throws条评论,例如:

/**
 * My method.
 * @throws SubclassOfMyException when something specific happens
 * @throws MyException if any other error occurs
 */
public void myMethod() throws MyException {
    // ...
}

Checkstyle应该通过在Javadoc方法模块中设置allowThrowsTagsForSubclasses来处理这种格式。但是,Eclipse Checkstyle插件经常(但并不总是)标记错误等情况。从命令行运行checkstyle不会将这些标记为错误。我使用的是插件版本5.6.0.201209221626。

有关解决方法的任何建议吗?也许我可以改变我的文档风格?

2 个答案:

答案 0 :(得分:2)

让我补充几点。在我的书中设置RedundantThrows以允许子类是可以的。我甚至会允许声明运行时异常:

<module name="RedundantThrows">
  <property name="allowUnchecked" value="true"/>
  <property name="allowSubclasses" value="true"/>
</module>

无论哪种方式,您都应该通过配置JavadocMethod检查来满足原始方案。确保allowUndeclaredRTE(允许运行时异常出现在Javadoc @throws标记中而不在方法签名中声明)并且allowThrowsTagsForSubclasses设置为true(您已经提到过)后者)。

除了这些之外,还有logLoadErrors,如果无法加载有问题的异常,可能会导致像“无法获取类信息”之类的Checkstyle警告。如果无法解决类路径问题,可能需要关闭它(我不推荐的解决方法,但它存在)。例如:

<module name="JavadocMethod">
    <property name="allowUndeclaredRTE" value="true"/>
    <property name="allowThrowsTagsForSubclasses" value="true"/>
    <property name="logLoadErrors" value="false"/>
</module>

Eclipse Checkstyle插件非常可靠,虽然我已经使用它多年,但它从未表现出任何严重的错误(缺少的功能是另一回事)。所以上面的配置确实应该有效。

如果你之后仍然遇到问题,那么它与Checkstyle没有任何关系,而是与Eclipse或你的使用相关(比如你的类路径是如何构建的,如果你有自定义构建器,如果你让非Eclipse程序写入工作空间等等;超出此问题的范围。)

答案 1 :(得分:0)

你可以在Checkstyle中允许子类抛出:

    <module name="RedundantThrows">
      <property name="allowSubclasses" value="true"/>
    </module>

并将您的方法签名更改为:

public void myMethod() throws SubclassOfMyException, MyException {

但有些人可能会认为它的代码风格不好。