Как скомпилировать проект с правилами Google Checkstyle с помощью gradle?


Я пытаюсь использовать конфигурацию Google checkstyle (https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml ) но я постоянно получаю ошибку на gradle check:

Unable to create a Checker: cannot initialize module TreeWalker - Unable to instantiate EmptyCatchBlock

Я использовал Gradle для построения проекта. Ниже мой Gradle в.строить.

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'checkstyle'

sourceCompatibility = 1.8
version = '1.0'

checkstyle {
    toolVersion = "6.3"
}

task "create-dirs" << {
   sourceSets*.java.srcDirs*.each { it.mkdirs() }
   sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

jar {
    manifest {
        attributes 'Implementation-Title': 'xyz',
                   'Implementation-Version': 0.01
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile (
        ['org.apache.logging.log4j:log4j-api:2.2'],
        ['org.apache.logging.log4j:log4j-core:2.2']
    )
    testCompile(
        ['junit:junit:4.11'],
        ['org.mockito:mockito-core:1.+']
    )
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

Кроме того, когда я пытаюсь добавить XML-файл конфигурации для плагина Checkstyle в IDEA, я получаю аналогичную ошибку, но с трассировкой стека:

org.infernus.idea.checkstyle.exception.CheckStylePluginException: <html><b>The CheckStyle rules file could not be loaded.</b><br>cannot initialize module TreeWalker - Unable to instantiate EmptyCatchBlock</html>
    at org.infernus.idea.checkstyle.checker.CheckerFactory.blacklistAndShowMessage(CheckerFactory.java:234)
    at org.infernus.idea.checkstyle.checker.CheckerFactory.createChecker(CheckerFactory.java:188)
    at org.infernus.idea.checkstyle.checker.CheckerFactory.getOrCreateCachedChecker(CheckerFactory.java:98)
    at org.infernus.idea.checkstyle.checker.CheckerFactory.getChecker(CheckerFactory.java:73)
    at org.infernus.idea.checkstyle.checker.CheckerFactory.getChecker(CheckerFactory.java:41)
Я не могу понять, что я делаю не так. Любая помощь была бы будьте оценены. Версия Gradle: 2.2
2 3

2 ответа:

Проблема заключается в том, что com.puppycrawl.tools.checkstyle.checks.blocks.EmptyCatchBlockCheck действительно был добавлен в checkstyle, но для версии 6.4-SNAPSHOT. Как это можно видеть в checkstyle repository (pom.xml history) версия 6.4-SNAPSHOT был представлен 02.02.2015, А класс EmptyCatchBlockCheck был создан 18.02.2015.

Gradle по-прежнему использует версию 6.3, как и в следующей выдержке из журнала:

:checkstyleMain
Download https://repo1.maven.org/maven2/com/puppycrawl/tools/checkstyle/6.3/checkstyle-6.3.pom
Таким образом, просто нет класса, который вы хотели бы использовать.

В соответствии с docs checkstyle classpath может быть задан с помощью свойства checkstyleClasspath - Вы можете попробовать настроить его вручную.

Я также подготовил демо-версию с версией 6.4-SNAPSHOT, ее можно найти здесь. Jar Checkstyle был построен с помощью mvn clean package с источником, взятым из этого РЕПО.

Вы можете добавить эту конфигурацию в свою сборку.файл gradle:

configurations {
  checksytleOverride
}

dependencies {
  checksytleOverride('com.puppycrawl.tools:checkstyle:6.11.2')
}

tasks.withType(Checkstyle) {
  checkstyleClasspath = project.configurations.checksytleOverride
}

Наслаждайтесь!