在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):JLLeitschuh/ktlint-gradle开源软件地址(OpenSource Url):https://github.com/JLLeitschuh/ktlint-gradle开源编程语言(OpenSource Language):Kotlin 99.7%开源软件介绍(OpenSource Introduction):Ktlint GradleProvides a convenient wrapper plugin over the ktlint project. Latest plugin version: 10.3.0 This plugin creates convenient tasks in your Gradle project that run ktlint checks or do code auto format. The plugin can be applied to any project, but only activates if that project has the kotlin plugin applied. The assumption being that you would not want to lint code you weren't compiling. Table of content
Supported Kotlin pluginsThis plugin supports the following kotlin plugins:
If you know any new Kotlin plugin that is not in this list - please, open a new issue. How to useMinimal supported versionsThis plugin was written using the new API available for the Gradle script Kotlin builds. This API is available in new versions of Gradle. Minimal supported Gradle version: Minimal supported ktlint version: Ktlint pluginSimple setupBuild script snippet for new plugin mechanism introduced in Gradle 2.1: Groovyplugins {
id "org.jlleitschuh.gradle.ktlint" version "<current_version>"
}
repositories {
// Required to download KtLint
mavenCentral()
} Kotlinplugins {
id("org.jlleitschuh.gradle.ktlint") version "<current_version>"
}
repositories {
// Required to download KtLint
mavenCentral()
} Using legacy apply methodBuild script snippet for use in all Gradle versions: Groovybuildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.jlleitschuh.gradle:ktlint-gradle:<current_version>"
}
}
repositories {
// Required to download KtLint
mavenCentral()
}
apply plugin: "org.jlleitschuh.gradle.ktlint" Kotlinbuildscript {
repositories {
maven("https://plugins.gradle.org/m2/")
}
dependencies {
classpath("org.jlleitschuh.gradle:ktlint-gradle:<current_version>")
}
}
repositories {
// Required to download KtLint
mavenCentral()
}
apply(plugin = "org.jlleitschuh.gradle.ktlint") Applying to subprojectsOptionally apply plugin to all project modules: Groovysubprojects {
apply plugin: "org.jlleitschuh.gradle.ktlint" // Version should be inherited from parent
repositories {
// Required to download KtLint
mavenCentral()
}
// Optionally configure plugin
ktlint {
debug = true
}
} Kotlinsubprojects {
apply(plugin = "org.jlleitschuh.gradle.ktlint") // Version should be inherited from parent
repositories {
// Required to download KtLint
mavenCentral()
}
// Optionally configure plugin
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
debug.set(true)
}
} Baseline supportPlugin supports KtLint baseline with following limitations:
Run task Testing KtLint snapshotsTo test KtLint snapshots add following configuration into project build script (latest KtLint snapshot version name you could find here): Groovyrepositories {
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
ktlint {
version = "0.41.0-SNAPSHOT"
} Kotlinrepositories {
maven("https://oss.sonatype.org/content/repositories/snapshots")
}
ktlint {
version.set("0.41.0-SNAPSHOT")
} IntelliJ Idea Only PluginNote: This plugin is automatically applied by the main This plugin just adds special tasks that can generate IntelliJ IDEA codestyle rules using ktlint. Idea plugin simple setupBuild script snippet for new plugin mechanism introduced in Gradle 2.1: plugins {
id("org.jlleitschuh.gradle.ktlint-idea") version "<current_version>"
} Idea plugin setup using legacy apply methodFor all Gradle versions: Use the same apply plugin: "org.jlleitschuh.gradle.ktlint-idea" ConfigurationThe following configuration block is optional. If you don't configure this the defaults defined in the KtlintExtension object will be used. The version of ktlint used by default may change between patch versions of this plugin. If you don't want to inherit these changes then make sure you lock your version here. Groovyimport org.jlleitschuh.gradle.ktlint.reporter.ReporterType
ktlint {
version = "0.22.0"
debug = true
verbose = true
android = false
outputToConsole = true
outputColorName = "RED"
ignoreFailures = true
enableExperimentalRules = true
additionalEditorconfigFile = file("/some/additional/.editorconfig")
disabledRules = ["final-newline"]
baseline = file("my-project-ktlint-baseline.xml")
reporters {
reporter "plain"
reporter "checkstyle"
reporter "sarif"
customReporters {
"csv" {
fileExtension = "csv"
dependency = project(":project-reporters:csv-reporter")
}
"yaml" {
fileExtension = "yml"
dependency = "com.example:ktlint-yaml-reporter:1.0.0"
}
}
}
kotlinScriptAdditionalPaths {
include fileTree("scripts/")
}
filter {
exclude("**/generated/**")
include("**/kotlin/**")
}
}
dependencies {
ktlintRuleset "com.github.username:rulseset:master-SNAPSHOT"
ktlintRuleset files("/path/to/custom/rulseset.jar")
ktlintRuleset project(":chore:project-ruleset")
} or in kotlin script: Kotlinimport org.jlleitschuh.gradle.ktlint.reporter.ReporterType
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
version.set("0.22.0")
debug.set(true)
verbose.set(true)
android.set(false)
outputToConsole.set(true)
outputColorName.set("RED")
ignoreFailures.set(true)
enableExperimentalRules.set(true)
additionalEditorconfigFile.set(file("/some/additional/.editorconfig"))
disabledRules.set(setOf("final-newline"))
baseline.set(file("my-project-ktlint-baseline.xml"))
reporters {
reporter(ReporterType.PLAIN)
reporter(ReporterType.CHECKSTYLE)
customReporters {
register("csv") {
fileExtension = "csv"
dependency = project(":project-reporters:csv-reporter")
}
register("yaml") {
fileExtension = "yml"
dependency = "com.example:ktlint-yaml-reporter:1.0.0"
}
}
}
kotlinScriptAdditionalPaths {
include(fileTree("scripts/"))
}
filter {
exclude("**/generated/**")
include("**/kotlin/**")
}
}
dependencies {
ktlintRuleset("com.github.username:rulseset:master-SNAPSHOT")
ktlintRuleset(files("/path/to/custom/rulseset.jar"))
ktlintRuleset(project(":chore:project-ruleset"))
} Setting reports output directoryIt is possible also to define different from default output directory for generated reports (by default it is "build/reports/ktlint"): Groovytasks.withType(org.jlleitschuh.gradle.ktlint.tasks.GenerateReportsTask) {
reportsOutputDirectory = project.layout.buildDirectory.dir("other/location/$name")
} Kotlin scripttasks.withType<org.jlleitschuh.gradle.ktlint.tasks.GenerateReportsTask> {
reportsOutputDirectory.set(
project.layout.buildDirectory.dir("other/location/$name")
)
} Custom reportersNote: If Ktlint custom reporter creates report output file internally, for example: class CsvReporter(
private val out: PrintStream
) : Reporter {
override fun onLintError(file: String, err: LintError, corrected: Boolean) {
val line = "$file;${err.line};${err.col};${err.ruleId};${err.detail};$corrected"
out.println(line)
File("some_other_file.txt").write(line) // <-- Here!!!
}
} "some_other_file.txt" won't be captured as task output. This may lead to the problem, that task will always be not "UP_TO_DATE" and caching will not work. Changing workers memory usageBy default, KtLint Gradle workers will use at most 256mb of heap size. For some projects it may be not enough, but it is possible to change: Groovytasks.withType(org.jlleitschuh.gradle.ktlint.tasks.BaseKtLintCheckTask).configureEach {
it.workerMaxHeapSize.set("512m")
} Kotlin scripttasks.withType<org.jlleitschuh.gradle.ktlint.tasks.BaseKtLintCheckTask> {
workerMaxHeapSize.set("512m")
} SamplesThis repository provides the following examples of how to set up this plugin:
Tasks AddedMain tasksThis plugin adds following tasks to every project:
Then for each
Additional helper tasksFollowing additional tasks are added:
All these additional tasks are always added only to the root project. FAQ
Yes. Just use gradle $ ./gradlew --continue ktlintCheck
No. These approaches are not equivalent to how they work. The problem that the plugin may not find some of the kotlin plugins if both approaches are used in the project configuration. Especially it is related to the Android plugin.
Yes, check tasks support it. On the first run, the task will check all files in the source set, on subsequent runs it will check only added/modified files. Format tasks do not check files incrementally.
Gradle based filtering are only working for files located inside project (subproject) folder, see gradle/gradle#3417 To filter files outside project dir, use: exclude { element -> element.file.path.contains("generated/") }
Ensure you are not pinning Kotlin version for "ktlint*" configurations added by plugin. KtLint relies on Kotlin compiler to parse source files. Each version of KtLint are build using specific Kotlin version. To exclude "ktlint*" Gradle configurations from Kotlin version pinning - use following approach: configurations.all {
if (!name.startsWith("ktlint")) {
resolutionStrategy {
eachDependency {
// Force Kotlin to our version
if (requested.group == "org.jetbrains.kotlin") {
useVersion("1.3.72")
}
}
}
}
} DevelopersImportingImport the settings.gradle.kts file into your IDE. To enable the Android sample either define the sdk.dir=<android-sdk-location> BuildingBuilding the plugin: On how to run the current plugin snapshot check on sample projects: IDEA IDERunning tests fromTo run tests in IDEA IDE, firstly you need to run following gradle task (or after any dependency change): $ ./plugin/gradlew pluginUnderTestMetadata Optionally you can add this step test run configuration. LinksKtlint Gradle Plugin on the Gradle Plugin Registry |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论