【发布时间】: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>
...但这没有用。它将采用默认路径。 (此外,<sourceDirectory> 已被弃用!)
只有一个 <sourceDirectory>(没有周围的<sourceDirectories>)确实有效,但<sourceDirectory> 只需要一条路径,您不能拥有多个<sourceDirectory>。所以,没有雪茄。另外,请记住 <sourceDirectory> 已弃用。
我还尝试了提供List<String> 到<sourceDirectories> 的各种其他方法,但是很遗憾,没有任何进展。下面是一些例子:
<sourceDirectories>[pathToCode]</sourceDirectories>
<sourceDirectories>pathToCode</sourceDirectories>
<sourceDirectories>{pathToCode}</sourceDirectories>
<sourceDirectories>{[pathToCode]}</sourceDirectories>
<sourceDirectories>{{pathToCode}}</sourceDirectories>
<sourceDirectories>{{{pathToCode}}}</sourceDirectories>
是否有另一种方式(直接,不带“子标签”)向 maven 提供 List<String>?
插件坏了吗?
我错过了什么吗?
以下编辑
我的项目结构:
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 约定。国际海事组织,遵循它会为自己省去很多麻烦!尝试将
<sourceDirectories>设置为../../**/*.java(或类似的东西),以便它从项目的根目录开始 -
这就是问题所在。
../../**/*不起作用,因为插件需要List<String>,而不是String。 -
此外,我不确定您所说的“Maven 约定”是什么意思。你愿意详细说明吗?我给出的例子只是一个大项目的一小部分。
标签: maven checkstyle