【问题标题】:How to use checkstyle:check in a multi module project如何使用 checkstyle:签入多模块项目
【发布时间】:2015-09-14 15:01:48
【问题描述】:

我正在尝试在多模块项目中使用 Maven Checkstyle 插件。 <sourceDirectories>(插件开始寻找代码的地方)的默认设置是${project.compileSourceRoots}。这在我的情况下解析为[C:\workspace\projectname\src\main\java],即List<String>。

现在,该默认路径对我来说没有任何价值,因为我的代码位于不同的位置,例如:[C:\workspaces\projectname\module1\src\main\java]。因此,我需要将<sourceDirectories> 更改为我的代码实际所在的目录列表。

到目前为止,一切都很好......

问题是<sourceDirectories> 需要List<String>。我尝试了以下方法:

<sourceDirectories>
    <sourceDirectory>pathToCode1</sourceDirectory>
    <sourceDirectory>pathToCode2</sourceDirectory>
</sourceDirectories>

...但这没有用。它将采用默认路径。 (此外,&lt;sourceDirectory&gt; 已被弃用!)

只有一个 &lt;sourceDirectory&gt;(没有周围的&lt;sourceDirectories&gt;)确实有效,但&lt;sourceDirectory&gt; 只需要一条路径,您不能拥有多个&lt;sourceDirectory&gt;。所以,没有雪茄。另外,请记住 &lt;sourceDirectory&gt; 已弃用。

我还尝试了提供List&lt;String&gt; 到&lt;sourceDirectories&gt; 的各种其他方法,但是很遗憾,没有任何进展。下面是一些例子:

<sourceDirectories>[pathToCode]</sourceDirectories>
<sourceDirectories>pathToCode</sourceDirectories>
<sourceDirectories>{pathToCode}</sourceDirectories>
<sourceDirectories>{[pathToCode]}</sourceDirectories>
<sourceDirectories>{{pathToCode}}</sourceDirectories>
<sourceDirectories>{{{pathToCode}}}</sourceDirectories>

是否有另一种方式(直接,不带“子标签”)向 maven 提供 List&lt;String&gt;?

插件坏了吗?

我错过了什么吗?

以下编辑

我的项目结构:

MyProject
|-- pom.xml <-- plugin runs fine here
|-- domain-module
|   |-- src
|   |   `-- main
|   |       `-- com/example/hello...
|   |           |-- TheCode.java
|   |       `-- resources
|   |           |-- checkstyle.xml
|   |           `-- LICENSE.TXT
|   `-- pom.xml
|-- poms
|   |-- parent
|   |   `-- pom.xml <-- this is my parent pom

我的父母 pom

<dependencies>
    <dependency>
        <groupId>com.puppycrawl.tools</groupId>
        <artifactId>checkstyle</artifactId>
        <version>${checkstyle.version}</version>
    </dependency>    
</dependencies>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.16</version>
                <dependencies>
                    <dependency>
                        <groupId>com.example.hello</groupId>
                        <artifactId>domain-module</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>validate</phase>
                        <configuration>
                            <configLocation>domain-module/src/main/resources/checkstyle.xml</configLocation>
                            <encoding>UTF-8</encoding>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>false</failsOnError>
                            <failOnViolation>true</failOnViolation>
                            <violationSeverity>warning</violationSeverity>
                            <logViolationsToConsole>true</logViolationsToConsole>
                            <skip>false</skip>
                        </configuration>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <...>
        </build>
    </pluginManagement>
</plugins>

【问题讨论】:

  • 为什么不直接删除sourceDirectories 并在父pom 上运行分析?默认情况下,它会查找所有 Java 类。看看this example。
  • 感谢您的建议!我已经阅读了那个例子并且我已经尝试过了。不幸的是,它不起作用。事实上,当从父 pom 运行插件时,Checkstyle 甚至不会启动。也许是因为我的项目不是那样的结构。请查看我正在使用的父 pom 配置的更新问题。
  • 这肯定是因为你的项目没有遵循 Maven 约定。国际海事组织,遵循它会为自己省去很多麻烦!尝试将 &lt;sourceDirectories&gt; 设置为 ../../**/*.java(或类似的东西),以便它从项目的根目录开始
  • 这就是问题所在。 ../../**/* 不起作用,因为插件需要 List&lt;String&gt;,而不是 String。
  • 此外,我不确定您所说的“Maven 约定”是什么意思。你愿意详细说明吗?我给出的例子只是一个大项目的一小部分。

标签: maven checkstyle


【解决方案1】:

从 2.13 版开始,sourceDirectories 的使用被破坏 (https://issues.apache.org/jira/browse/MCHECKSTYLE-260)。

在 2.12 中它可以工作。 Andreas Dangel 在 Jira 中提到:

这里描述的配置 Checkstyle - Exclude folder 仍然有效。然后排除发生在 checkstyle 中,而不是 maven-checkstyle-plugin。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2016-06-12
    • 2012-06-29
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多