Checkstyle, Невозможно создать корневой модуль

Я пытаюсь настроить Checkstyle в проекте. Я добавил:

    apply plugin: 'checkstyle'
    checkstyle {
        // assign the latest checkstyle version explicitly
        // default version is very old, likes 5.9
        toolVersion = '8.6'
        // checkstyle.xml copy from:
        // https://raw.githubusercontent.com/checkstyle/checkstyle/checkstyle-8.6/src/main/resources/google_checks.xml
        // the version should be as same as plugin version
        configFile = rootProject.file('config/checkstyle/checkstyle.xml')
    }
    task Checkstyle(type: Checkstyle) {
        source 'src/main/java'
        include '**/*.java'
        exclude '**/gen/**'
        exclude '**/R.java'
        exclude '**/BuildConfig.java'

        // empty classpath
        classpath = rootProject.files()
    }

к моему корневому файлу allprojects во всех allprojects.

Но когда я бегу ./gradlew checkstyle

Я получил:

* What went wrong:
Execution failed for task ':app:Checkstyle'.
> Unable to create Root Module: config {/Users/user/Development/project/config/checkstyle/checkstyle.xml}, classpath {null}.

Даже файл с правилами находится в указанном каталоге.

Ответы

Ответ 1

Проблема заключалась в том, что он не мог найти файл правил. Итак, я изменился:

configFile = rootProject.file('config/checkstyle/checkstyle.xml')

чтобы:

configFile = file("${rootDir}/config/checkstyle/ckeckstyle.xml")

и теперь он правильно его подбирает.

Ответ 2

Это случилось со мной, когда я обновил Android Gradle Plugin до 3.3.0

Пожалуйста, запустите это:

./gradlew checkstyle --stacktrace

Возможно, вам нужно будет проверить ваш конфигурационный файл checkstyle.xml.

Мне нужно было переместить эти два тега:

 <module name="SuppressionCommentFilter"/>

        <!--Enable usage SUPPRESS CHECKSTYLE comment-->
        <module name="SuppressWithNearbyCommentFilter">
            <property name="commentFormat" value="CHECKSTYLE IGNORE"/>
            <property name="checkFormat" value=".*"/>
            <property name="influenceFormat" value="0"/>
        </module>

внутри

<module name="TreeWalker"> 

тег

Также мне нужно было удалить:

<module name="SuppressionCommentFilter"/>

Ответ 3

Я получил эту ошибку, когда config/checkstyle/checkstyle.xml содержал ссылку на несуществующий файл. В моем случае, через:

<module name="SuppressionFilter">
    <property name="file" value="config/checkstyle/checkstyle-suppressions.xml"/> <!-- Oops: No such file! -->
</module>

Исправлена проблема с созданием файла config/checkstyle/checkstyle-suppressions.xml.

Если это помогает, его содержимое (с тем же заголовком, что и checkstyle.xml) было:

<suppressions>
    <suppress files="/generated/" checks="\w+"/>
    <suppress files="/test/" checks="\w+"/>
</suppressions>

Ответ 4

У меня также была похожая проблема и сообщение об исключении. Следующие шаги решили мою проблему:

Обновлена версия инструмента до 8.16. До того, как у меня была 8.1, я использовал 'configDir' вместо свойства 'configFile'.

configDir = file("$rootProject.projectDir/etc/checkstyle")

До этого было:

configFile = file("$rootProject.projectDir/etc/checkstyle/checkstyle.xml")

Кроме того, у меня было свойство reportDir, которое также было изменено, чтобы указывать каталог вместо файла.

reportsDir = file("$project.buildDir/reports/checkstyle")

До этого было:

reportsDir = file("$project.buildDir/reports/checkstyle/checkstyle.xml")

Я использую JDK 11, и он работал с ним.

Ответ 5

Эта ошибка возникает, когда файл конфигурации не может быть прочитан. У вас есть файл /Users/user/Development/project/config/checkstyle/checkstyle.xml?

Ответ 6

У меня была очень похожая проблема, и я в основном использовал ответ @Bohemian. checkStyle не смог найти файл, поэтому я принудительно кормил его waht, которого он хотел. В моем случае основная причина заключалась в том, что плагин gradle для NetBeans не распространяется на все переменные среды, поэтому ссылка на ${basedir}/config/checkstyle/import-control.xml не удалась. Когда checkStyle запущен в NetBeans, ${basedir} устанавливается в $USER_HOME вместо корня проекта. В качестве обходного пути я скопировал необходимые файлы в свой домашний каталог и это позволяет checkStyle запускать checkStyle.
Уродливо, но лучше, чем ничего.

Ответ 7

Эта проблема также может быть связана с тем, что вы используете устаревший apis в своей конфигурации checkstyle. Смотрите эту ссылку здесь и здесь.

Ответ 8

Я видел этот вопрос в разных измерениях (как на SO, так и на github), и вот краткое изложение того, что я нашел.

Я предполагаю, что местоположение checkstyle.xml не является проблемой здесь. Прежде чем приступить к рассмотрению этого решения, я предложу вам посмотреть другие ответы о том, как решить эту проблему. Самый быстрый способ проверить это поместить оператор print в одну из ваших задач и запустить его (задачу)

println(file("${rootDir.projectDir}/path/to/checkstyle.xml"))

Убедитесь, что путь, который он печатает в консоли, правильный/правильный. Если это правильный путь, но вы все еще видите ошибку, то у вас другая проблема; Перейдите к приведенным ниже сценариям:

  • Если вы добавили плагин checkstyle в Gradle следующим образом (я использую Gradle> = 4.0):
plugins {
id 'checkstyle'
}

Версия для проверки по умолчанию будет использоваться для этой версии Gradle. Существует другая матрица совместимости для версии Gradle и версии плагина Check Style по умолчанию ЗДЕСЬ

  • Если вы хотите указать checkstyle.xml, который будет использоваться плагином, вы должны помнить об этом - существует матрица версии плагина и совместимой версии checkstyle.xml. Для стиля проверки Google лучший способ, который я нашел, это проверить релиз плагина. Например, если я хочу использовать версию 8.2 в своем проекте, запись для build.gradle будет выглядеть следующим образом:
plugins {
id 'checkstyle'
}

checkstyle {
  project.ext.checkstyleVersion = '8.20'
}

При этом будет автоматически использоваться (вытягивать) checkstyle.xml, совместимый с указанной версией (т.е. 8.20).

  • Если вы хотите настроить (добавить/удалить) некоторые правила проверки стиля, я бы посоветовал вам начать (редактировать) совместимую версию. Чтобы узнать версию checkstyle.xml, которая будет совместима с этой версией плагина, перейдите в выпуски Google Checkstyle на Github и загрузите 8.20 релиз zip или tar. После распаковки найдите xml-код google (или sun) в каталоге src/main/resources/. После настройки XML по мере необходимости ваша запись build.gradle будет выглядеть следующим образом

plugins {
id 'checkstyle'
}

checkstyle {
  project.ext.checkstyleVersion = '8.20'
  configFile = file("${rootDir.projectDir}/path/to/google_checks.xml")
}

Надеюсь, вы перестанете видеть эту ошибку.

Ответ 9

Моя проблема заключалась в том, что этот процесс запускался из другого каталога, чем я думал.

Даже если я проверил, чтобы убедиться, что checkstyle.xml действительно существует в пути, он показал, что все еще ломал, потому что мой процесс сборки был не в cd в нужную директорию, чтобы запустить это!

Убедитесь, что вы запускаете это из того места, где вы думаете!