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
в нужную директорию, чтобы запустить это!
Убедитесь, что вы запускаете это из того места, где вы думаете!