Maven Checkstyle和Eclipse 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”.

最佳答案 看来你遇到了版本冲突. Maven Checkstyle插件2.16基于Checkstyle 6.2,而Eclipse插件是最新的,使用Checkstyle 6.16.1(
source).

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

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

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

点赞