Устраните зависимость в плагине CheckStyle

#maven-3 #maven-plugin #checkstyle

Вопрос:

Я обновляю плагин CheckStyle во время выполнения, согласно документации.

Однако мои локальные сборки и сборки CI/CD завершаются неудачно, потому что, похоже, в обновлении плагина происходит разрешение зависимостей, не соответствующее определенному repositories в pom.xml .

Рассматриваемая зависимость содержит файлы стиля проверки компании.

Примечание: Я даже попытался добавить зависимость вне плагина, как показано ниже. Никаких костей.

Есть какие-нибудь намеки на то, как это решить? Журналы следуют за настройкой.

 <repositories>
    <repository>
        <id>checkstyle-repo</id>
        <url>https://repo/where/dependency/resides</url>
    </repository>
    <repository>
        <id>company-repo</id>
        <url>http://nexus-01.co.lan/content/groups/CompanyRepository/</url>
    </repository>
</repositories>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>3.1.2</version>
        <dependencies>
            <dependency>
                <groupId>com.puppycrawl.tools</groupId>
                <artifactId>checkstyle</artifactId>
                <version>8.41</version>
            </dependency>
            <dependency>
                <groupId>com.company</groupId>
                <artifactId>co-checkstyles</artifactId>
                <version>1.0.4</version>
            </dependency>
        </dependencies>
        <configuration>
            <configLocation>company_transitional_checkstyle.xml</configLocation>
            <encoding>UTF-8</encoding>
            <failOnViolation>true</failOnViolation>
        </configuration>
        <executions>
            <execution>
                <id>validate</id>
                <phase>validate</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
...
</plugins>
...
...
<dependencies>
...
    <dependency>
        <groupId>com.company</groupId>
        <artifactId>co-checkstyles</artifactId>
        <version>1.0.4</version>
    </dependency>
...
 
 [INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.985 s
[INFO] Finished at: 2021-03-11T19:14:33-05:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check (validate) 
on project tax-service: Execution validate of goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2:check failed: 
Plugin org.apache.maven.plugins:maven-checkstyle-plugin:3.1.2 or one of its dependencies could not be resolved: 
Failure to find com.company:co-checkstyles:jar:1.0.4 in http://nexus-01.co.lan/content/groups/CompanyRepository/ was cached in the local repository, 
resolution will not be reattempted until the update interval of corepository has elapsed or updates are forced -> [Help 1]
[ERROR] 
 

Ответ №1:

Решенный.

mvn -X ради победы.

Но Священный Артефакт! Бэтмен… да, это не совсем понятно, или, может быть, просто не очень хорошо документировано, и я использовал maven почти 13 лет, начиная с некоторых поздних версий 1.0 и первых версий 2.0. Я не могу припомнить, чтобы сталкивался с такого рода нюансами конфигурации в жизненном цикле.

Не вдаваясь слишком глубоко в сорняки, разрешение зависимостей maven имеет два (2) режима.

  1. Зависимости проекта с помощью repository
  2. Зависимости плагинов через pluginRepository

В случае такого плагина, как CheckStyle, где путь к классу может быть «обновлен во время выполнения» для использования последней версии checkstyle, зависимости разрешаются из a pluginRepository .

На работе мы обычно не определяем pluginRepositories в наших POM и разрешаем Maven «по умолчанию» для проекта repositories , например, corepository at nexus-01 .

Включение отладки -X во время mvn выполнения привело меня к этой небольшой информации…

 11835 [DEBUG] === PROJECT BUILD PLAN ================================================
11835 [DEBUG] Project:       com.company:tax-service:1.1.3.36cc94b4
11835 [DEBUG] Dependencies (collect): [runtime]
11835 [DEBUG] Dependencies (resolve): [compile, compile runtime, runtime, test]
11835 [DEBUG] Repositories (dependencies): [gitlab-co-checkstyle (https://gitlab.com/api/v4/projects/nnnnnnnn/packages/maven, default, releases snapshots), corepository (http://nexus-01.co.lan/content/groups/CompanyRepository/, default, releases)]
11836 [DEBUG] Repositories (plugins)     : [corepository (http://nexus-01.co.lan/content/groups/CompanyRepository/, default, releases)]
 

бум… Плагин CheckStyle разрешает зависимости от pluginRepository ! Эта небольшая информация сказала мне все, что мне было нужно.

Я подлатал ci_settings.xml его, и все было хорошо.

 11835 [DEBUG] === PROJECT BUILD PLAN ================================================
11835 [DEBUG] Project:       com.company:tax-service:1.1.3.36cc94b4
11835 [DEBUG] Dependencies (collect): [runtime]
11835 [DEBUG] Dependencies (resolve): [compile, compile runtime, runtime, test]
11835 [DEBUG] Repositories (dependencies): [gitlab-co-checkstyle (https://gitlab.com/api/v4/projects/nnnnnnnn/packages/maven, default, releases snapshots), corepository (http://nexus-01.co.lan/content/groups/CompanyRepository/, default, releases)]
11836 [DEBUG] Repositories (plugins)     : [gitlab-co-checkstyle (https://gitlab.com/api/v4/projects/nnnnnnnn/packages/maven, default, releases snapshots), corepository (http://nexus-01.co.lan/content/groups/CompanyRepository/, default, releases)]