Как использовать более старую версию Checkstyle со сборкой Maven? - PullRequest
0 голосов
/ 12 декабря 2011

Я интегрирую проект 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.

1 Ответ

0 голосов
/ 13 декабря 2011

Ответ: родителю pom.xml нужны эти элементы -

<project>
<build>
    <!-- http://maven.apache.org/guides/mini/guide-configuring-plugins.html -->
    <!-- doesn't seem to be necessary? -->
<!--
    <pluginManagement><plugins><plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${checkstyle.plugin.version}</version>
    </plugin></plugins></pluginManagement>
-->

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
        <configuration>
            <reportPlugins>
                <plugin>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <configuration>
                        <configLocation>checkstyle/mycompany-coding-rules.xml</configLocation>
                        <packageNamesLocation>checkstyle_packages.xml</packageNamesLocation>
                    </configuration>
                </plugin>
            </reportPlugins>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${checkstyle.plugin.version}</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>
</build>

<!-- http://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html -->
    <!-- doesn't seem to be necessary? -->
<!--
<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>${checkstyle.plugin.version}</version>
            <configuration>
                <configLocation>checkstyle/mycompany-coding-rules.xml</configLocation>
                <packageNamesLocation>checkstyle_packages.xml</packageNamesLocation>
            </configuration>
        </plugin>
    </plugins>
</reporting>
-->

Проблема в том, что TeamCity XML Reporting не может проанализировать отчеты Checkstyle до Checkstyle 5.1, поэтому мне все это не поможет!

...