2012-01-23 75 views
16

试图根据guidelines on the apache site在maven pom中设置自定义checkstyle配置不能用于非常简单的情况。忽略Maven Checkstyle configLocation?

我创建了一个项目,MyProject的,使用Maven的建议(即的src/main/JAVA /,SRC /主/资源)的目录布局,单个文件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."); 
    } 
} 

空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> 

和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> 
    <version>1.0.0</version> 

    <reporting> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-checkstyle-plugin</artifactId> 
     <version>2.8</version> 
     <configuration> 
      <configLocation>my_checks.xml</configLocation> 
     </configuration> 
     </plugin> 
    </plugins> 
    </reporting> 
</project> 

运行'mvn -X checkstyle:checkstyle'将使用sun_checks.xml(默认值),而不是使用my_checks.xml文件中的配置,这可以通过生成的checkstyle错误和调试输出(例如, '[DEBUG] request.getConfigLocation()config/sun_checks.xml')。

我知道my_checks.xml是有效的,因为checkstyle.config.location可以使用在由CARBONI勾画的战略性质被改变,但是这将导致移动到多模块项目时的问题,并从不同'官方'apache maven checkstyle说明。

+0

确切地说你的配置xml位于何处? – Corubba

回答

10

时,这对我的作品:

  1. 我把my_checks.xml在根级别(平行于pom.xml)和
  2. 裹在<build>元素插件(相对于<reporting>

随着这些变化,我看到以下内容:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-checkstyle-plugin:2.8:checkstyle' with basic configurator --> 
[DEBUG] (f) cacheFile = /home/dave/tech/lang/java/web/struts/playground/so/s231_01/target/checkstyle-cachefile 
[DEBUG] (f) configLocation = my_checks.xml 
... etc ... 
[DEBUG] request.getConfigLocation() my_checks.xml 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader 
... etc ... 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader org.codehaus.plexus.resource.loader.URLResourceLoader. 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader org.codehaus.plexus.resource.loader.JarResourceLoader. 
[DEBUG] The resource 'my_checks.xml' was found as /home/dave/tech/lang/java/web/struts/playground/so/s231_01/my_checks.xml. 

请参考usage documentation,具体是:

要专门配置的Checkstyle插件,你需要在你的pom.xml的<build>部分添加它如下所示的样本。

<reporting>用途是mvn site

+2

谢谢戴夫牛顿!问题是使用而不是。如果Maven Checkstyle指南给出了checkstyle示例而不是站点示例,那将会很有帮助。 – HeavyE

+0

@HeavyE没问题:)在技术上它确实和[目标文档](http://maven.apache.org/plugins/maven-checkstyle-plugin/plugin-info.html)区分插件和报告目标,但如果你对术语不太熟悉(如同Maven的许多文档一样;) –

+1

如果您使用的是Maven 3,请参阅https://cwiki.apache.org/MAVEN/maven-3x-compatibility -notes.html#Maven3.xCompatibilityNotes-SiteandReporting“部分中的插件配置不再影响POM的部分中的插件。”对于Maven 2,您可能需要在报告和构建之间重复一些位。 – Bae

22

是的我发现在Apache网站上的指导方针过时了。通过拖网和拼凑我已经设法解决这个问题。

移动到<build>标签工作了一段时间,但是当更新到最新的checkstyle时,它再次被忽略。我发现我必须设置一个属性:

<project ...> 

.... 

    <properties> 
    <checkstyle.config.location>properties/checkstyle-configuration.xml</checkstyle.config.location> 
    </properties> 

    <build> 
    ... 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-checkstyle-plugin</artifactId> 
     <version>2.9.1</version> 
     </plugin> 
    </plugins> 
    </build> 

    ... 

</project> 

这是在这里找到了我如何创建自己的CheckStyle海关检查的一部分。例如:
http://blog.blundellapps.com/create-your-own-checkstyle-check/

,并从这里的源代码取:
https://github.com/blundell/CreateYourOwnCheckStyleCheck

+1

Thx!这适用于其他配置属性以及: '' 注意:我必须添加file:到位置 – IDKFA