有没有办法确保每个包中都有“package-info.java”(使用Findbugs,Checkstyle或PMD)

时间:2013-12-30 15:30:31

标签: java checkstyle findbugs pmd

在我们的项目中,我们使用的是Findbugs,Checkstyle和PMD。 Findbugs的一个验证是检查潜在的NullPointerExceptions。默认情况下,我们在包级别上将所有内容定义为@Nonnull(在“package-info.java”中将适当的注释应用于包)。

问题是开发人员不时会将这个“package-info.java”添加到新创建的包中,并且没有任何自动检查来验证这一点。

我想在上面列出的工具之一中添加一些自定义规则,以确保每个包中都存在“package-info.java”(我们有持续的集成构建,在这种情况下将会被破坏)。有没有能力做到这一点?

另一种选择是以某种方式配置Findbugs将所有内容视为@Nonnull而不使用“package-info.java”(但据我所知 - 这是不可能的)。

2 个答案:

答案 0 :(得分:2)

您可以启用Checkstyle的JavadocPackage检查。保留allowLegacy属性的默认值false,以确保人们使用 package-info.java 而不是 package.html

我没有记录的方法来更改null分析注释的FindBugs默认值。所以你的下一个任务可能是确保每个 package-info.java 都包含适当的注释......


让我添加一条未被征求意见的建议:就个人而言,我建议不要使用默认注释,而是显式注释每个必须为非null的方法参数。这意味着默认值为 nullable ,但FindBugs足够聪明,可以检查假定参数为非null的部分的方法代码,并将其标记为错误。对于大型代码库,从治理的角度来看,这更可靠,更容易。当然,如果您有现有的代码库,则可能无法使用此路径。

答案 1 :(得分:0)

不是我知道的,但由于它不是“代码”问题,而是更多的管家问题,您可以创建一个简单的构建步骤来调用shell脚本来断言对于每个java文件,该目录应包含package-info.java。

执行此操作的shell脚本只有几行。您可以使用不同的返回代码退出,例如0表示确定,1表示丢失,输出所有缺少文件的目录并将其包含在构建错误消息中。