Spec-Zone.ru › Kotlin 2

Инструменты контроля качества кода в проектах Kotlin

Инструменты контроля качества кода помогают соблюдать стандарты программирования, заблаговременно обнаруживать ошибки, измерять покрытие тестами и поддерживать качество кода во всех проектах Kotlin. В этом руководстве показано, как интегрировать популярные инструменты, такие как ktlint, detekt, SonarQube, SonarCloud и Kover в backend-проект с помощью Maven или Gradle.

Форматирование кода с помощью ktlint

ktlint — это линтер и форматтер для Kotlin, который обеспечивает соблюдение официальных соглашений о написании кода Kotlin без дополнительной настройки.

ktlint проверяет такие правила, как отступы, пробелы вокруг операторов, порядок импортов и завершающие запятые. Если обнаружено нарушение, сборка завершается с ошибкой и сообщением с указанием файла и номера строки. Помимо обнаружения нарушений, ktlint может автоматически исправлять простые проблемы.

Чтобы интегрировать ktlint в проект:

  1. Добавьте плагин в файл сборки:

    <!-- pom.xml -->
    <plugin>
        <groupId>com.github.gantsign.maven</groupId>
        <artifactId>ktlint-maven-plugin</artifactId>
        <version>3.7.1</version>
        <executions>
            <execution>
                <id>check</id>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    // build.gradle.kts
    plugins {
        id("org.jlleitschuh.gradle.ktlint") version "12.3.0"
    }
    
  2. Запустите линтер, чтобы проверить стиль кода:

    mvn ktlint:check
    
    ./gradlew ktlintCheck
    
  3. (Необязательно) Чтобы настроить правила, можно также добавить файл .editorconfig в корневой каталог проекта. Например, чтобы разрешить импорты с подстановочными знаками и отключить требование завершающих запятых:

    [*.{kt,kts}]
    ij_kotlin_imports_layout = *
    ktlint_standard_trailing-comma-on-call-site = disabled
    ktlint_standard_trailing-comma-on-declaration-site = disabled
    

    По умолчанию ktlint следует официальным соглашениям о написании кода Kotlin. Если вы предпочитаете руководство по стилю Kotlin для Android, которое заметно отличается от соглашений Kotlin, укажите стиль кода android_studio в файле .editorconfig:

    [*.{kt,kts}]
    ktlint_code_style = android_studio
    
  4. Чтобы автоматически исправить проблемы с форматированием, выполните команду:

    mvn ktlint:format
    
    ./gradlew ktlintFormat
    

Дополнительную информацию о доступных функциях и правилах см. в документации ktlint.

Анализ кода с помощью detekt

detekt — это инструмент статического анализа кода Kotlin, который обнаруживает проблемы в коде, чрезмерную сложность и потенциальные ошибки.

Чтобы интегрировать detekt в проект:

  1. Добавьте плагин в файл сборки:

    <!-- pom.xml -->
    <plugin>
        <groupId>com.github.ozsie</groupId>
        <artifactId>detekt-maven-plugin</artifactId>
        <version>1.23.8</version>
        <executions>
            <execution>
                <phase>verify</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    // build.gradle.kts
    plugins {
        id("io.gitlab.arturbosch.detekt") version "1.23.8"
    }
    
  2. Создайте стандартный файл конфигурации detekt.yml:

    mvn detekt:generate-config
    
    ./gradlew detektGenerateConfig
    
  3. Откройте файл detekt.yml и настройте правила в созданном файле. Например:

    complexity:
      LongMethod:
        threshold: 50
    style:
      MagicNumber:
        active: false
    
  4. Укажите файл конфигурации в файле сборки, чтобы detekt мог применить новые правила:

    <!-- pom.xml -->
    <plugin>
        <groupId>com.github.ozsie</groupId>
        <artifactId>detekt-maven-plugin</artifactId>
        <version>1.23.8</version>
        <configuration>
            <config>detekt.yml</config>
            <report>
                <report>txt:reports/detekt.txt</report>
                <report>xml:reports/detekt.xml</report>
            </report>
        </configuration>
        <executions>
            <execution>
                <phase>verify</phase>
                <goals>
                    <goal>check</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    // build.gradle.kts
    detekt {
        toolVersion = "1.23.8"
        config.setFrom(file("config/detekt/detekt.yml"))
        buildUponDefaultConfig = true
    }
    
  5. Запустите анализ:

    mvn detekt:check
    
    ./gradlew detekt
    

detekt создает отчет со списком всех нарушений правил, их серьезностью, расположением в файле и описанием проблемы. По умолчанию Gradle сохраняет отчеты в build/reports/detekt, а Maven — в каталоге reports/detekt в корне проекта.

Дополнительную информацию см. в документации detekt для Gradle и Maven.

Качество кода с помощью SonarSource

SonarQube и SonarCloud от SonarSource обеспечивают глубокий статический анализ проектов Kotlin, включая обнаружение ошибок, поиск уязвимостей и отслеживание покрытия кода через веб-панель.

Чтобы проанализировать проект с помощью SonarQube:

  1. Добавьте плагин в файл сборки:

    <!-- pom.xml -->
    <plugin>
        <groupId>org.sonarsource.scanner.maven</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>5.7.0.6970</version>
    </plugin>
    
    // build.gradle.kts
    plugins {
        id("org.sonarqube") version "6.2.0.5505"
    }
    
    sonar {
        properties {
            property("sonar.projectKey", "my-project")
            property("sonar.host.url", "http://localhost:9000")
        }
    }
    
  2. (Необязательно) Настройте свойства анализа. Например, чтобы сборка ожидала результат проверки контрольных условий качества и завершалась с ошибкой, если проверка не пройдена, добавьте свойство sonar.qualitygate.wait:

    mvn verify sonar:sonar \
      -Dsonar.qualitygate.wait=true \
      -Dsonar.projectKey=my-project \
      -Dsonar.host.url=http://localhost:9000 \
      -Dsonar.token=YOUR_TOKEN
    
    // build.gradle.kts
    sonar {
        properties {
            property("sonar.qualitygate.wait", "true")
        }
    }
    

    Правила контрольных условий качества (например, минимальные пороги покрытия и допустимое количество проблем) задаются в веб-интерфейсе SonarQube или SonarCloud в разделе Контрольные условия качества, а не в файле сборки.

  3. Запустите анализ на сервере SonarQube:

    mvn verify sonar:sonar \
      -Dsonar.projectKey=my-project \
      -Dsonar.host.url=http://localhost:9000 \
      -Dsonar.token=YOUR_TOKEN
    

    Для SonarCloud замените URL хоста на https://sonarcloud.io и укажите ключ организации:

    mvn verify sonar:sonar \
      -Dsonar.projectKey=my-project \
      -Dsonar.organization=my-org \
      -Dsonar.host.url=https://sonarcloud.io \
      -Dsonar.token=YOUR_TOKEN
    

    Чтобы запустить анализ, используйте задачу sonar и укажите токен аутентификации:

    ./gradlew sonar \
      -Dsonar.token=YOUR_TOKEN
    

    По умолчанию анализ выполняется на локальном сервере SonarQube. Чтобы использовать SonarCloud, измените блок sonar {} в файле build.gradle.kts, указав https://sonarcloud.io, и добавьте ключ организации:

    sonar {
        properties {
            property("sonar.projectKey", "example-project")
            property("sonar.organization", "example-org")
            property("sonar.host.url", "https://sonarcloud.io")
        }
    }
    
  4. Откройте панель SonarQube или SonarCloud, чтобы просмотреть результаты. На панели проблемы сгруппированы по типу (ошибка, уязвимость, запах кода) и серьезности.

Дополнительную информацию см. в документации SonarSource.

Покрытие кода с помощью Kover

Kover — это официальный инструмент JetBrains для измерения покрытия кода Kotlin. Он измеряет, какие строки и ветви кода покрыты тестами, и создает удобные для чтения отчеты.

В отличие от JaCoCo, Kover корректно обрабатывает специфичные для Kotlin конструкции, такие как inline-функции и классы данных, поэтому показывает точные значения покрытия без ложных отрицательных результатов, вызванных байт-кодом, сгенерированным компилятором.

Чтобы интегрировать Kover в проект:

  1. Добавьте плагин в файл сборки:

    <!-- pom.xml -->
    <plugin>
        <groupId>org.jetbrains.kotlinx</groupId>
        <artifactId>kover-maven-plugin</artifactId>
        <version>0.9.8</version>
        <executions>
            <execution>
                <id>instr</id>
                <goals>
                    <goal>instrumentation</goal>
                </goals>
            </execution>
            <execution>
                <id>kover-verify</id>
                <goals>
                   <goal>verify</goal>
                </goals>
            </execution>
            <execution>
                <id>kover-report-xml</id>
                <goals>
                    <goal>report-xml</goal>
                </goals>
            </execution>
            <execution>
                <id>kover-report-html</id>
                <goals>
                    <goal>report-html</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    // build.gradle.kts
    plugins {
        id("org.jetbrains.kotlinx.kover") version "0.9.8"
    }
    
  2. Запустите тесты, чтобы собрать данные о покрытии и создать отчет:

    mvn verify
    
    ./gradlew koverVerify koverHtmlReport
    
  3. Откройте HTML-отчет, созданный в каталоге target/site/kover/html/ (для Gradle — build/reports/kover/html/), чтобы просмотреть покрытие построчно.

  4. (Необязательно) Чтобы задать минимальный порог покрытия, при несоблюдении которого сборка завершится с ошибкой, можно добавить конфигурацию проверки покрытия в файл сборки. Например:

    <!-- pom.xml -->
    <configuration>
      <!-- Create new coverage verification rule -->
      <rules>
          <rule>
              <bounds>
                  <bound>
                      <minValue>50</minValue>
                      <coverageUnits>LINE</coverageUnits>
                      <aggregationForGroup>COVERED_PERCENTAGE</aggregationForGroup>
                  </bound>
              </bounds>
          </rule>
      </rules>
    </configuration>
    
    // build.gradle.kts
    // Add a `kover` configuration block
    import kotlinx.kover.gradle.plugin.dsl.*
    
    kover {
        reports {
            total {
                log {
                    aggregationForGroup = AggregationType.COVERED_PERCENTAGE
                    coverageUnits = CoverageUnit.LINE
                }
                verify {
                    rule {
                        minBound(50)
                    }
                }
            }
        }
    }
    

Дополнительную информацию о настройке правил проверки см. в документации Kover для Maven и Gradle.

Другие инструменты

Помимо ktlint, detekt, SonarQube, SonarCloud и Kover, попробуйте другие инструменты для повышения качества кода Kotlin:

Инструмент

Описание

CodeQL

Движок семантического анализа кода от GitHub. Поддерживает Kotlin и интегрируется с GitHub Actions для автоматического поиска уязвимостей.

Semgrep

Быстрый и легковесный инструмент статического анализа с поддержкой пользовательских правил. Его можно использовать для проверки соблюдения шаблонов или обнаружения антипаттернов в коде Kotlin.

PMD

Анализатор исходного кода с поддержкой Kotlin (с помощью средства обнаружения дублирования кода CPD), выявляющий распространенные ошибки программирования и повторяющийся код.

Что дальше

  • Запуск тестов в проектах Maven

  • Настройка проекта Kotlin с помощью Maven

24 июля 2026 г.
Использование процессоров аннотаций в проектах KotlinНачало работы со Spring Boot и Kotlin

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-code-analysis.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API