Maven Checkstyle和Eclipse Checkstyle使用相同的配置文件报告相似但不同的结果

时间:2016-05-09 22:12:09

标签: eclipse maven checkstyle

我有一个使用Tycho构建的Eclipse插件代码库。它使用在依赖工件中定义的父POM,该工件指定Checkstyle配置的名称。

我还用checkstyle配置检查了父pom。我已经将Eclipse配置为使用与Maven构建相同的配置文件。

我发现Maven报告列出了Eclipse报告未提及的另一个违规行为。

在我正在查看的特定Java源文件中,Maven报告生成了这个列表:

3: warning: Empty line should be followed by <p> tag on the next line.
8: warning: 'package' should be separated from previous statement.
26: warning: First sentence should be present.
31: warning: First sentence should be present.
34: warning: First sentence should be present.
48: warning: First sentence should be present.

对于相同的源文件,使用相同的Checkstyle配置文件,Eclipse会报告除第一个警告之外的所有文件。

如果重要,这里是文件的前几行,包括第3行:

/*******************************************************************************
 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  All rights reserved.
 * // line 3
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/

具有讽刺意味的是,我无法“修复”此警告,因为我们的项目当前指定了许可文件的特定格式,并且在下一行添加“p”违反了该格式。

在任何情况下,我的问题都不是修复警告,它理解为什么Eclipse和Maven使用相同的Checkstyle配置文件在报告的违规行为方面存在差异。

根据我的理解,与此违规相关的类别是“JavadocParagraph”。我的Checkstyle配置文件包含此类别,但它不会覆盖“allowNewlineParagraph”属性。据推测,此属性的默认值为true。这对我来说意味着Maven以某种方式决定将此属性设置为“false”,但Eclpse仍然会看到默认的未指定值“true”。

1 个答案:

答案 0 :(得分:2)

您似乎遇到了版本冲突。 Maven Checkstyle插件2.16基于Checkstyle 6.2,而Eclipse插件是最新的,使用Checkstyle 6.16.1(source)。

JavadocParagraph 检查(例如6.2中的this one)进行了一些更改,这些更改将出现在Eclipse插件中,但不会出现在Maven版本中。

因此,您有3个选项可以解决此问题:

  1. 将Maven插件升级到2.17 - 这似乎是最简单的,但您仍会使用不同的版本,以便将来遇到其他问题。
  2. 将Eclipse插件降级到版本6.2.x - 这样可行,但是给你留下一个相当旧版本的Checkstyle。
  3. 明确指定Checkstyle版本(推荐)。因此,您将继续使用Eclipse的最新Checkstyle插件,但将Maven配置为使用相同版本的Checkstyle(instructions)。