尝试根据apache站点上的指导原则在 maven pom中设置自定义checkstyle配置在一个非常简单的情况下不起作用.
我创建了一个项目MyProject,使用Maven推荐的目录布局(即src/main/java /,src/main/resources),单个文件MyClass.java:
package com.myproject;
public class MyClass {
public static void main(String[] args) {
System.out.println("This line is longer than 80 characters which returns an error in sun_checks.xml, however my_checks.xml allows for much longer lines and will not return a long line error.");
}
}
Run Code Online (Sandbox Code Playgroud)
一个空的checkstyle文件,my_checks.xml:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
<module name="Checker">
<property name="severity" value="warning"/>
<module name="TreeWalker">
</module>
</module>
Run Code Online (Sandbox Code Playgroud)
和根据指南中的规格的pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myproject</groupId>
<artifactId>A_Project</artifactId>
<name>A Project</name> …Run Code Online (Sandbox Code Playgroud) 最近我正在寻找最好的代码检查工具集.我的IDE是Intellij 15.0,我知道那里有很好的检查功能,但是当我查看互联网时,我没有找到Intellij内置检查代码和那三个之间的良好比较.试过它们的人是否可以提供一些最佳实践?Intellij是否涵盖所有这些?
我知道findbugs以二进制级别运行但仍然让它保持比较.
我正在使用Eclipse的CheckStyle插件.
它非常适合在99%的时间内找到我不想要的东西,但是我实际上只有1%的时间打算故意违反规则,我想让CheckStyle知道它不需要关注标记警告.
示例:缺少Javadoc注释规则.大多数时候我都希望Javadoc对我的方法发表评论.但是,方法如:
public boolean isValid() {
return valid;
}
Run Code Online (Sandbox Code Playgroud)
没有人可能会过得很快.
是否有类似@SuppressWarnings注释可用于将特定的CheckStyle规则违规标记为可接受的?可能是某种特殊格式的评论?我不想禁用该规则,我只想忽略特定的违规行为.
(我知道在这种情况下我可以编写Javadoc注释,但在其他情况下修复规则违规并不是那么简单).
我有两个包
COM/MYDOMAIN/ABC /代表/ XYZ/JAXWS /管理
和 com/mydomain/abc/xyz/jaxws/managed
我要求只为第二个包禁用checkstyle,因为它们包含自动生成的代理类.
我使用了一个suppress.xml,如下所示
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
"suppressions_1_1.dtd">
<suppressions>
<!-- Suppress JavadocPackage in the test packages -->
<suppress checks="JavadocPackage" files="[\\/]test[\\/]"/>
<!-- Suppress all checkstyle for autogenerated jaxws.managed package -->
<suppress checks="[a-zA-Z0-9]*" files="([^(delegate)])+([a-z]*[\\/]jaxws[\\/]managed[\\/])+"/>
</suppressions>
Run Code Online (Sandbox Code Playgroud)
请注意,禁用JavadocPackage检查的第一次禁止工作正常但第二次没有.我担心我选择包的正则表达可能是错误的.任何帮助深表感谢.
用一个例子说明我的要求:
选择的标准是包名称应该以包名称jaxws.managed包含但不应包含delegate在包名称中.delegate应该jaxws.managed在包名称之前提供更多内容:
例如:com.mycomany.delegate.service.jaxws.managed必须启用包中的checktyle检查,同时com.mycompany.abc.service.jaxws.service必须禁用,并且需要注意的是,除了此模式之外,我不知道所有的pakages名称.
谢谢并问候Sibi
我有一个checkstyle.xml,看起来像这样:
<module name="Checker">
....
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CSOFF\: ([\w\|]+)"/>
<property name="onCommentFormat" value="CSON\: ([\w\|]+)"/>
<property name="checkFormat" value="$1"/>
</module>
<module name="TreeWalker">
<module name="LineLength">
<property name="max" value="200"/>
</module>
....
</module>
</module>
Run Code Online (Sandbox Code Playgroud)
在我的一个课程中,我有一个超过200个字符的行,并在其周围添加以下内容:
// CSOFF: LineLength
...
// CSON: LineLength
Run Code Online (Sandbox Code Playgroud)
然而,作为checkstyle的一部分,这条线不会被忽略.
我在pom.xml中指定了以下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.6</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
并执行此:
mvn checkstyle:checkstyle
Run Code Online (Sandbox Code Playgroud) 我在命令行上通过mvn构建我的项目.
每当发生checkStyle错误时,我都会看到这种类型的输出:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-
plugin:2.4:checkstyle (default) on project myProject-server:
An error has occurred in Checkstyle report generation.
There are 2 checkstyle errors. -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
如何找出导致这些CheckStyle失败的代码行?
Java checkstyle使我感到困惑和困惑.
package pmain;
/**
* Some text here.
*/
public class Main {
}
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的所有代码.Checkstyle显示"第一句应以句号结束".在"/**".
为什么CheckStyle会产生此警告?
我需要使用checkstyle配置吗?难道我做错了什么?"这里有些文字"不是第一句话吗?是"." 不是一个时期?
我有以下Gradle构建文件:https://github.com/markuswustenberg/jsense/blob/a796055f984ec309db3cc0f3e8340cbccac36e4e/jsense-protobuf/build.gradle其中包括:
checkstyle {
// TODO The excludes are not working, ignore failures for now
//excludes '**/org/jsense/serialize/protobuf/gen/**'
ignoreFailures = true
showViolations = false
}
findbugs {
// TODO The excludes are not working, ignore failures for now
//excludes '**/org/jsense/serialize/protobuf/gen/**'
ignoreFailures = true
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试在org.jsense.serialize.protobuf.gen包中排除自动生成的代码.我无法弄清楚为excludes参数提供的字符串的格式,并且文档没有多大帮助:http://www.gradle.org/docs/1.10/dsl/org.gradle.api.plugins.quality .FindBugs.html#org.gradle.api.plugins.quality.FindBugs:排除(它只是说"排除模式集".).
所以我的问题是:如何为Findbugs和Checkstyle插件格式化排除模式字符串?
我正在运行Gradle 1.10.
谢谢!
编辑1:我得到Checkstyle排除使用以下内容:
tasks.withType(Checkstyle) {
exclude '**/org/jsense/serialize/protobuf/gen/**'
}
Run Code Online (Sandbox Code Playgroud)
但是,在Findbugs插件上使用完全相同的排除不起作用:
tasks.withType(FindBugs) {
exclude '**/org/jsense/serialize/protobuf/gen/*'
}
Run Code Online (Sandbox Code Playgroud)
编辑2:接受的答案是有效的,使用XML文件并对其进行过滤也是如此,如下所示:
findbugs {
excludeFilter = file("$projectDir/config/findbugs/excludeFilter.xml")
}
Run Code Online (Sandbox Code Playgroud)
和
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) 我有以下通用类型的方法,但是当我运行maven checkstyle(maven-checkstyle-plugin,2.121)时,它会Expected @param tag for '<T>'在maven构建期间给出错误消息.我该如何克服这个?
/**
* Read in specified type of object from request body.
* @param request The HttpServletRequest
* @param expected The expected type T
* @return <T> specified type of object
*/
public <T extends Object> T getExpectedValue(
final HttpServletRequest request, final Class<T> expected)
Run Code Online (Sandbox Code Playgroud)
我使用以下来关闭泛型param标签,但它没有用,我也有上面提到的java doc.
<module name="JavadocType">
<property name="allowMissingParamTags" value="true"/>
</module>
Run Code Online (Sandbox Code Playgroud) 将maven项目导入Eclipse Luna后,在修改方法后保存时弹出窗口中会显示以下错误:
无法初始化模块TreeWalker - 无法实例化JUnitTestCase
JUnitTestCase指的是checkstyle xml文件中的模块:
<module name="JUnitTestCase"/>
Run Code Online (Sandbox Code Playgroud)
我安装了'M2Eclipse的Checkstyle配置插件'和'Checkstyle Plug-in 6.4.0'.我的pom文件中"maven-checkstyle-plugin"的插件定义指定版本2.10.
注意:我意识到这与其他一些具有相同错误的问题类似(但是指定了不同的模块)但是我还没有找到令人满意的解决方案.我相信我可以删除checkstyle配置文件中的模块条目,但我要求它按设计工作,这不是更好的选择.