Я интегрирую проект Maven с существующим настраиваемым набором правил Checkstyle, скомпилированным в виде jar-файла и доступным в репозитории Nexus.Набор правил зависит от Checkstyle 5.0 и не совместим с более новыми версиями.
У меня проблемы с настройкой Maven для использования этой более старой версии Checkstyle с моими правилами.
Вот мой макет проекта:
root/
pom.xml
buildsupport/
pom.xml
src/main/resources/checkstyle
mycompany-coding-rules.xml
src/main/java/com.mycompany.checkstyletest/
CheckstyleViolator.java
[other projects with pom.xml and java source...]
А вот и мой родитель pom.xml
:
<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.0</version>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>buildsupport</artifactId>
<version>X.Y.Z</version>
</dependency>
<dependency>
<groupId>checkstyle</groupId>
<artifactId>checkstyle</artifactId>
<version>5.0</version>
</dependency>
<dependency>
<groupId>com.mycompany.checkstyle</groupId>
<artifactId>mycompany-checkstyle</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.5</version>
<configuration>
<configLocation>checkstyle/mycompany-coding-rules.xml</configLocation>
<packageNamesLocation>checkstyle_packages.xml</packageNamesLocation>
</configuration>
</plugin>
</plugins>
</reporting>
...
Если я опущу <version>2.5</version>
из плагина maven-checkstyle-plugin в <reporting><plugins><plugin>...
и <build><pluginManagement><plugins><plugin>
, изапустив mvn site
в корневом каталоге, я получаю сбой проекта верхнего уровня:
...
[INFO] Generating "Checkstyle" report --- maven-checkstyle-plugin:2.8
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.0:site (default-site) on project mytoplevel-project:
Error during page generation: Error rendering Maven report: Failed during checkstyle configuration:
cannot initialize module TreeWalker - TreeWalker is not allowed as a parent of com.mycompany.checkstyle.checks.coding.ImportOrderCheck -> [Help 1]
Добавление <version>2.5</version>
, как в приведенном выше XML, позволяет проекту верхнего уровня успешно, но та же ошибкав первом дочернем проекте:
...
[INFO] Generating "Checkstyle" report --- maven-checkstyle-plugin:2.5
...
[INFO] mytoplevel-project ................................ SUCCESS [4.528s]
[INFO] buildsupport ...................................... FAILURE [0.489s]
...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.0:site (default-site) on project buildsupport:
Error during page generation: Error rendering Maven report: Failed during checkstyle configuration:
cannot initialize module TreeWalker - TreeWalker is not allowed as a parent of com.mycompany.checkstyle.checks.coding.ImportOrderCheck -> [Help 1]
Я уверен, что эта ошибка связана с использованием последней версии Checkstyle, а не 5.0, поскольку я видел ту же ошибку при использовании набора правил в качестве плагина Eclipseпо сравнению с Checkstyle 5.5 - это было исправлено путем отката версии плагина Checkstyle до 5.0.
Чего я не понимаю, так это как дочерние проекты выбирают неправильную версию Checkstyle.