16 Star 53 Fork 3

Gitee 极速下载 / kotlin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/JetBrains/kotlin
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
build.gradle.kts 43.66 KB
一键复制 编辑 原始数据 按行查看 历史
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174
import org.gradle.crypto.checksum.Checksum
import org.gradle.plugins.ide.idea.model.IdeaModel
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
buildscript {
// a workaround for kotlin compiler classpath in kotlin project: sometimes gradle substitutes
// kotlin-stdlib external dependency with local project :kotlin-stdlib in kotlinCompilerClasspath configuration.
// see also configureCompilerClasspath@
val bootstrapCompilerClasspath by configurations.creating
val bootstrapBuildToolsApiClasspath by configurations.creating
dependencies {
bootstrapCompilerClasspath(kotlin("compiler-embeddable", bootstrapKotlinVersion))
bootstrapBuildToolsApiClasspath(kotlin("build-tools-impl", bootstrapKotlinVersion))
classpath("org.jetbrains.kotlin:kotlin-build-gradle-plugin:${kotlinBuildProperties.buildGradlePluginVersion}")
}
val gsonVersion = libs.versions.gson.get()
configurations.all {
resolutionStrategy.eachDependency {
if (requested.group == "com.google.code.gson" && requested.name == "gson") {
useVersion(gsonVersion)
because("Force using same gson version because of https://github.com/google/gson/pull/1991")
}
}
}
}
plugins {
base
idea
id("org.jetbrains.gradle.plugin.idea-ext") version "1.0.1" // this version should be in sync with repo/buildsrc-compat/build.gradle.kts
id("build-time-report")
id("java-instrumentation")
id("jps")
id("modularized-test-configurations")
id("idea-rt-hack")
id("resolve-dependencies")
id("org.gradle.crypto.checksum") version "1.4.0"
id("org.jetbrains.kotlinx.binary-compatibility-validator") version "0.13.1" apply false
signing
id("org.jetbrains.kotlin.jvm") apply false
id("org.jetbrains.kotlin.plugin.serialization") apply false
if (kotlinBuildProperties.isKotlinNativeEnabled) {
id("kotlin.native.build-tools-conventions") apply false
}
`jvm-toolchains`
alias(libs.plugins.gradle.node) apply false
}
val isTeamcityBuild = project.kotlinBuildProperties.isTeamcityBuild
val defaultSnapshotVersion: String by extra
findProperty("deployVersion")?.let {
assert(findProperty("build.number") != null) { "`build.number` parameter is expected to be explicitly set with the `deployVersion`" }
}
val buildNumber by extra(findProperty("build.number")?.toString() ?: defaultSnapshotVersion)
val kotlinVersion by extra(
findProperty("deployVersion")?.toString()?.let { deploySnapshotStr ->
if (deploySnapshotStr != "default.snapshot") deploySnapshotStr else defaultSnapshotVersion
} ?: buildNumber
)
val kotlinLanguageVersion: String by extra
val kotlinApiVersionForModulesUsedInIDE: String by extra
extra["kotlin_root"] = rootDir
val jpsBootstrap by configurations.creating
val commonBuildDir = File(rootDir, "build")
val distDir by extra("$rootDir/dist")
val distKotlinHomeDir by extra("$distDir/kotlinc")
val distLibDir = "$distKotlinHomeDir/lib"
val commonLocalDataDir = "$rootDir/local"
val ideaSandboxDir = "$commonLocalDataDir/ideaSandbox"
val artifactsDir = "$distDir/artifacts"
val ideaPluginDir = "$artifactsDir/ideaPlugin/Kotlin"
// TODO: use "by extra()" syntax where possible
extra["distLibDir"] = project.file(distLibDir)
extra["commonLocalDataDir"] = project.file(commonLocalDataDir)
extra["ideaSandboxDir"] = project.file(ideaSandboxDir)
extra["ideaPluginDir"] = project.file(ideaPluginDir)
rootProject.apply {
from(rootProject.file("gradle/versions.gradle.kts"))
from(rootProject.file("gradle/checkArtifacts.gradle.kts"))
from(rootProject.file("gradle/checkCacheability.gradle.kts"))
from(rootProject.file("gradle/retryPublishing.gradle.kts"))
}
IdeVersionConfigurator.setCurrentIde(project)
if (!project.hasProperty("versions.kotlin-native")) {
// BEWARE! Bumping this version doesn't take an immediate effect on TeamCity: KTI-1107
extra["versions.kotlin-native"] = if (kotlinBuildProperties.isKotlinNativeEnabled) {
kotlinBuildProperties.defaultSnapshotVersion
} else {
"2.0.20-dev-3623"
}
}
val irCompilerModules = arrayOf(
":compiler:ir.tree",
":compiler:ir.serialization.common",
":compiler:ir.serialization.js",
":compiler:ir.serialization.jvm",
":compiler:ir.serialization.native",
":compiler:ir.objcinterop",
":compiler:ir.backend.common",
":compiler:ir.actualization",
":compiler:ir.interpreter",
":compiler:ir.inline",
":wasm:wasm.ir"
).also { extra["irCompilerModules"] = it }
val irCompilerModulesForIDE = arrayOf(
":compiler:ir.tree",
":compiler:ir.serialization.common",
":compiler:ir.serialization.jvm",
":compiler:ir.serialization.js", // used in IJ android plugin in `ComposeIrGenerationExtension`
":compiler:ir.objcinterop",
":compiler:ir.backend.common",
":compiler:ir.actualization",
":compiler:ir.interpreter",
":compiler:ir.inline",
).also { extra["irCompilerModulesForIDE"] = it }
val commonCompilerModules = arrayOf(
":compiler:psi",
":compiler:frontend.common-psi",
":analysis:light-classes-base",
":compiler:frontend.common",
":compiler:util",
":compiler:config",
":compiler:config.jvm",
":compiler:compiler.version",
":compiler:cli-common",
":compiler:resolution.common",
":compiler:resolution.common.jvm",
":core:metadata",
":core:metadata.jvm",
":core:deserialization.common",
":core:deserialization.common.jvm",
":core:compiler.common",
":core:compiler.common.jvm",
":core:compiler.common.js",
":core:compiler.common.native",
":core:compiler.common.wasm",
":core:compiler.common.web",
":core:util.runtime",
":compiler:frontend.common.jvm",
":compiler:frontend.java", // TODO this is fe10 module but some utils used in fir ide now
":analysis:decompiled:decompiler-to-stubs",
":analysis:decompiled:decompiler-to-file-stubs",
":analysis:decompiled:decompiler-js",
":analysis:decompiled:decompiler-native",
":analysis:decompiled:decompiler-to-psi",
":analysis:decompiled:light-classes-for-decompiled",
":analysis:analysis-api-providers",
":analysis:project-structure",
":analysis:kt-references",
":kotlin-build-common",
":kotlin-util-io",
":kotlin-util-klib",
":kotlin-util-klib-abi",
":native:kotlin-native-utils",
":compiler:build-tools:kotlin-build-statistics",
":compiler:build-tools:kotlin-build-tools-api",
":js:js.config",
":wasm:wasm.config",
).also { extra["commonCompilerModules"] = it }
val firCompilerCoreModules = arrayOf(
":compiler:fir:cones",
":compiler:fir:providers",
":compiler:fir:semantics",
":compiler:fir:resolve",
":compiler:fir:fir-serialization",
":compiler:fir:fir-deserialization",
":compiler:fir:plugin-utils",
":compiler:fir:tree",
":compiler:fir:java",
":compiler:fir:native",
":compiler:fir:raw-fir:raw-fir.common",
":compiler:fir:raw-fir:psi2fir",
":compiler:fir:checkers",
":compiler:fir:checkers:checkers.jvm",
":compiler:fir:checkers:checkers.js",
":compiler:fir:checkers:checkers.native",
":compiler:fir:checkers:checkers.wasm",
":compiler:fir:checkers:checkers.web.common",
":compiler:fir:entrypoint", // TODO should not be in core modules but FIR IDE uses DependencyListForCliModule from this module
":compiler:fir:fir2ir:jvm-backend", // TODO should not be in core modules but FIR IDE uses Fir2IrSignatureComposer from this module
":compiler:fir:fir2ir" // TODO should not be in core modules but FIR IDE uses Fir2IrSignatureComposer from this module
).also { extra["firCompilerCoreModules"] = it }
val firAllCompilerModules: Array<String> = (
firCompilerCoreModules + arrayOf(
":compiler:fir:raw-fir:light-tree2fir",
":compiler:fir:analysis-tests",
":compiler:fir:analysis-tests:legacy-fir-tests"
)
).also { extra["firAllCompilerModules"] = it }
val fe10CompilerModules = arrayOf(
":compiler",
":core:descriptors.runtime",
":core:descriptors",
":core:descriptors.jvm",
":compiler:light-classes",
":compiler:resolution",
":compiler:serialization",
":compiler:frontend",
":compiler:container",
":core:deserialization",
":compiler:frontend:cfg",
":compiler:ir.psi2ir",
":compiler:backend.jvm",
":compiler:backend.jvm.lower",
":compiler:backend.jvm.codegen",
":compiler:backend.jvm.entrypoint",
":compiler:backend.js",
":compiler:backend.wasm",
":kotlin-util-klib-metadata",
":compiler:backend-common",
":compiler:backend",
":compiler:plugin-api",
":compiler:javac-wrapper",
":compiler:cli-base",
":compiler:cli",
":compiler:cli-js",
":compiler:incremental-compilation-impl",
":js:js.ast",
":js:js.sourcemap",
":js:js.serializer",
":js:js.parser",
":js:js.frontend",
":js:js.translator",
":js:js.dce",
":native:frontend.native",
":wasm:wasm.frontend",
":compiler:backend.common.jvm",
":analysis:decompiled:light-classes-for-decompiled-fe10",
).also { extra["fe10CompilerModules"] = it }
extra["compilerModules"] =
irCompilerModules +
fe10CompilerModules +
commonCompilerModules +
firAllCompilerModules
/**
* An array of projects used in the IntelliJ Kotlin Plugin.
*
* Experimental declarations from Kotlin stdlib cannot be used in those projects to avoid stdlib binary compatibility problems.
* See KT-62510 for details.
*/
val projectsUsedInIntelliJKotlinPlugin =
fe10CompilerModules +
commonCompilerModules +
firCompilerCoreModules +
irCompilerModulesForIDE +
arrayOf(
":analysis:analysis-api",
":analysis:analysis-api-fe10",
":analysis:analysis-api-fir",
":analysis:analysis-api-impl-barebone",
":analysis:analysis-api-impl-base",
":analysis:analysis-api-providers",
":analysis:analysis-api-standalone:analysis-api-standalone-base",
":analysis:analysis-api-standalone:analysis-api-fir-standalone-base",
":analysis:analysis-api-standalone",
":analysis:analysis-internal-utils",
":analysis:analysis-test-framework",
":analysis:decompiled",
":analysis:kt-references",
":analysis:kt-references:kt-references-fe10",
":analysis:light-classes-base",
":analysis:low-level-api-fir",
":analysis:project-structure",
":analysis:symbol-light-classes",
) +
arrayOf(
":kotlin-allopen-compiler-plugin.cli",
":kotlin-allopen-compiler-plugin.common",
":kotlin-allopen-compiler-plugin.k1",
":kotlin-allopen-compiler-plugin.k2",
":kotlin-assignment-compiler-plugin.cli",
":kotlin-assignment-compiler-plugin.common",
":kotlin-assignment-compiler-plugin.k1",
":kotlin-assignment-compiler-plugin.k2",
":plugins:parcelize:parcelize-compiler:parcelize.backend",
":plugins:parcelize:parcelize-compiler:parcelize.cli",
":plugins:parcelize:parcelize-compiler:parcelize.common",
":plugins:parcelize:parcelize-compiler:parcelize.k1",
":plugins:parcelize:parcelize-compiler:parcelize.k2",
":plugins:parcelize:parcelize-runtime",
":kotlin-sam-with-receiver-compiler-plugin.cli",
":kotlin-sam-with-receiver-compiler-plugin.common",
":kotlin-sam-with-receiver-compiler-plugin.k1",
":kotlin-sam-with-receiver-compiler-plugin.k2",
":kotlinx-serialization-compiler-plugin.cli",
":kotlinx-serialization-compiler-plugin.common",
":kotlinx-serialization-compiler-plugin.k1",
":kotlinx-serialization-compiler-plugin.k2",
":kotlinx-serialization-compiler-plugin.backend",
":kotlin-lombok-compiler-plugin.cli",
":kotlin-lombok-compiler-plugin.common",
":kotlin-lombok-compiler-plugin.k1",
":kotlin-lombok-compiler-plugin.k2",
":kotlin-noarg-compiler-plugin.cli",
":kotlin-noarg-compiler-plugin.common",
":kotlin-noarg-compiler-plugin.k1",
":kotlin-noarg-compiler-plugin.k2",
":kotlin-noarg-compiler-plugin.backend",
":plugins:android-extensions-compiler",
":kotlin-sam-with-receiver-compiler-plugin.cli",
":kotlin-sam-with-receiver-compiler-plugin.common",
":kotlin-sam-with-receiver-compiler-plugin.k1",
":kotlin-sam-with-receiver-compiler-plugin.k2",
":kotlin-compiler-runner-unshaded",
":kotlin-preloader",
":daemon-common",
":kotlin-daemon-client",
":kotlin-scripting-compiler",
":kotlin-gradle-statistics",
":jps:jps-common",
) +
arrayOf(
":compiler:ir.serialization.native",
":native:analysis-api-klib-reader",
":native:base",
":native:objcexport-header-generator",
":native:objcexport-header-generator-analysis-api",
":native:objcexport-header-generator-k1",
)
extra["projectsUsedInIntelliJKotlinPlugin"] = projectsUsedInIntelliJKotlinPlugin
// They are embedded just because we don't publish those dependencies as separate Maven artifacts (yet)
extra["kotlinJpsPluginEmbeddedDependencies"] = listOf(
":compiler:cli-common",
":kotlin-build-tools-enum-compat",
":kotlin-compiler-runner-unshaded",
":daemon-common",
":core:compiler.common",
":core:compiler.common.jvm",
":core:compiler.common.js",
":core:compiler.common.native",
":core:compiler.common.wasm",
":core:compiler.common.web",
":core:descriptors",
":core:descriptors.jvm",
":compiler:backend.common.jvm",
":js:js.serializer",
":core:deserialization",
":core:deserialization.common",
":core:deserialization.common.jvm",
":compiler:frontend.common.jvm",
":compiler:frontend.java",
":core:metadata",
":core:metadata.jvm",
":kotlin-preloader",
":compiler:util",
":compiler:config",
":compiler:config.jvm",
":js:js.config",
":wasm:wasm.config",
":core:util.runtime",
":compiler:compiler.version",
":compiler:build-tools:kotlin-build-statistics",
)
extra["kotlinJpsPluginMavenDependencies"] = listOf(
":kotlin-daemon-client",
":kotlin-build-common",
":kotlin-util-io",
":kotlin-util-klib",
":kotlin-util-klib-metadata",
":native:kotlin-native-utils",
":compiler:build-tools:kotlin-build-tools-api",
)
extra["kotlinJpsPluginMavenDependenciesNonTransitiveLibs"] = listOf(
commonDependency("org.jetbrains.kotlin:kotlin-reflect")
)
extra["compilerArtifactsForIde"] = listOfNotNull(
":prepare:ide-plugin-dependencies:android-extensions-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:allopen-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:scripting-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:incremental-compilation-impl-tests-for-ide",
":prepare:ide-plugin-dependencies:js-ir-runtime-for-ide",
":prepare:ide-plugin-dependencies:kotlin-build-common-tests-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-cli-for-ide",
":prepare:ide-plugin-dependencies:kotlin-gradle-statistics-for-ide",
":prepare:ide-plugin-dependencies:kotlin-jps-common-for-ide",
":prepare:ide-plugin-dependencies:kotlin-jps-plugin-classpath",
":prepare:ide-plugin-dependencies:kotlin-jps-plugin-tests-for-ide",
":prepare:ide-plugin-dependencies:kotlin-jps-plugin-testdata-for-ide",
":prepare:ide-plugin-dependencies:kotlinx-serialization-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:noarg-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:sam-with-receiver-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:assignment-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:parcelize-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:lombok-compiler-plugin-for-ide",
":prepare:ide-plugin-dependencies:kotlin-objcexport-header-generator-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-tests-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-testdata-for-ide",
":prepare:ide-plugin-dependencies:low-level-api-fir-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-impl-base-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-impl-base-tests-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-fir-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-fir-tests-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-fe10-for-ide",
":prepare:ide-plugin-dependencies:high-level-api-fe10-tests-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-impl-base-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-impl-base-tests-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-k2-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-k2-tests-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-fe10-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-fe10-tests-for-ide",
":prepare:ide-plugin-dependencies:kt-references-fe10-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-providers-for-ide",
":prepare:ide-plugin-dependencies:analysis-project-structure-for-ide",
":prepare:ide-plugin-dependencies:symbol-light-classes-for-ide",
":prepare:ide-plugin-dependencies:analysis-api-standalone-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-ir-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-common-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-fe10-for-ide",
":prepare:ide-plugin-dependencies:kotlin-compiler-fir-for-ide",
":prepare:kotlin-jps-plugin",
":kotlin-script-runtime",
":kotlin-scripting-common",
":kotlin-scripting-jvm",
":kotlin-scripting-compiler",
":kotlin-scripting-compiler-impl",
":kotlin-android-extensions-runtime",
":plugins:parcelize:parcelize-runtime",
":kotlin-stdlib-common",
":kotlin-stdlib",
":kotlin-test",
":kotlin-daemon",
":kotlin-compiler",
":kotlin-annotations-jvm",
":kotlin-stdlib-jdk7",
":kotlin-stdlib-jdk8",
":kotlin-reflect",
":kotlin-main-kts",
":kotlin-dom-api-compat"
)
val coreLibProjects by extra {
listOfNotNull(
":kotlin-stdlib",
":kotlin-stdlib-common",
":kotlin-stdlib-jdk7",
":kotlin-stdlib-jdk8",
":kotlin-test",
":kotlin-reflect"
)
}
val mppProjects by extra {
listOf(
":kotlin-stdlib",
":kotlin-test",
)
}
val projectsWithOptInToUnsafeCastFunctionsFromAddToStdLib by extra {
listOf(
":analysis:analysis-api-fe10",
":analysis:analysis-api-fir",
":analysis:decompiled:light-classes-for-decompiled",
":analysis:symbol-light-classes",
":compiler",
":compiler:backend.js",
":compiler:light-classes",
":jps:jps-common",
":js:js.tests",
":kotlin-build-common",
":kotlin-gradle-plugin",
":kotlin-scripting-jvm-host-test",
":native:kotlin-klib-commonizer",
)
}
val gradlePluginProjects = listOf(
":kotlin-gradle-plugin",
":kotlin-gradle-plugin-api",
":kotlin-gradle-plugin-annotations",
":kotlin-gradle-plugin-idea",
":kotlin-gradle-plugin-idea-proto",
":kotlin-gradle-plugin-model",
":kotlin-gradle-plugin-tcs-android",
":compose-compiler-gradle-plugin",
":kotlin-allopen",
":kotlin-noarg",
":kotlin-power-assert",
":kotlin-sam-with-receiver",
":kotlin-parcelize-compiler",
":kotlin-lombok",
":kotlin-assignment"
)
val ignoreTestFailures by extra(project.kotlinBuildProperties.ignoreTestFailures)
val dependencyOnSnapshotReflectWhitelist = setOf(
":kotlin-compiler",
":kotlin-reflect",
":tools:binary-compatibility-validator",
":tools:kotlin-stdlib-gen",
)
allprojects {
if (!project.path.startsWith(":kotlin-ide.")) {
pluginManager.apply("common-configuration")
}
if (kotlinBuildProperties.isInIdeaSync) {
afterEvaluate {
configurations.all {
// Remove kotlin-compiler from dependencies during Idea import. KTI-1598
dependencies.removeIf { (it as? ProjectDependency)?.dependencyProject?.path == ":kotlin-compiler" }.ifTrue {
logger.warn("Removed :kotlin-compiler project dependency from $this")
}
}
}
}
configurations.all {
val configuration = this
if (name != "compileClasspath") {
return@all
}
resolutionStrategy.eachDependency {
if (requested.group != "org.jetbrains.kotlin") {
return@eachDependency
}
val isReflect = requested.name == "kotlin-reflect" || requested.name == "kotlin-reflect-api"
// More strict check for "compilerModules". We can't apply this check for all modules because it would force to
// exclude kotlin-reflect from transitive dependencies of kotlin-poet, ktor, com.android.tools.build:gradle, etc
if (project.path in @Suppress("UNCHECKED_CAST") (rootProject.extra["compilerModules"] as Array<String>)) {
val expectedReflectVersion = commonDependencyVersion("org.jetbrains.kotlin", "kotlin-reflect")
if (isReflect) {
check(requested.version == expectedReflectVersion) {
"""
$configuration: 'kotlin-reflect' should have '$expectedReflectVersion' version. But it was '${requested.version}'
Suggestions:
1. Use 'commonDependency("org.jetbrains.kotlin:kotlin-reflect") { isTransitive = false }'
2. Avoid 'kotlin-reflect' leakage from transitive dependencies with 'exclude("org.jetbrains.kotlin")'
""".trimIndent()
}
}
if (requested.name.startsWith("kotlin-stdlib")) {
check(requested.version != expectedReflectVersion) {
"""
$configuration: '${requested.name}' has a wrong version. It's not allowed to be '$expectedReflectVersion'
Suggestions:
1. Most likely, it leaked from 'kotlin-reflect' transitive dependencies. Use 'isTransitive = false' for
'kotlin-reflect' dependencies
2. Avoid '${requested.name}' leakage from other transitive dependencies with 'exclude("org.jetbrains.kotlin")'
""".trimIndent()
}
}
}
if (isReflect && project.path !in dependencyOnSnapshotReflectWhitelist) {
check(requested.version != kotlinVersion) {
"""
$configuration: 'kotlin-reflect' is not allowed to have '$kotlinVersion' version.
Suggestion: Use 'commonDependency("org.jetbrains.kotlin:kotlin-reflect") { isTransitive = false }'
""".trimIndent()
}
}
}
}
val mirrorRepo: String? = findProperty("maven.repository.mirror")?.toString()
repositories {
when (kotlinBuildProperties.getOrNull("attachedIntellijVersion")) {
null -> {}
"master" -> {
maven { setUrl("https://www.jetbrains.com/intellij-repository/snapshots") }
}
else -> {
kotlinBuildLocalRepo(project)
}
}
mirrorRepo?.let(::maven)
maven(intellijRepo) {
content {
includeGroupByRegex("com\\.jetbrains\\.intellij(\\..+)?")
}
}
maven("https://packages.jetbrains.team/maven/p/ij/intellij-dependencies") {
content {
includeGroupByRegex("org\\.jetbrains\\.intellij\\.deps(\\..+)?")
includeVersion("org.jetbrains.jps", "jps-javac-extension", "1")
}
}
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-dependencies") {
content {
includeModule("org.jetbrains.dukat", "dukat")
includeModule("org.jetbrains.kotlin", "android-dx")
includeModule("org.jetbrains.kotlin", "jcabi-aether")
includeModule("org.jetbrains.kotlin", "kotlin-build-gradle-plugin")
includeModule("org.jetbrains.kotlin", "protobuf-lite")
includeModule("org.jetbrains.kotlin", "protobuf-relocated")
includeModule("org.jetbrains.kotlinx", "kotlinx-metadata-klib")
}
}
maven("https://download.jetbrains.com/teamcity-repository") {
content {
includeModule("org.jetbrains.teamcity", "serviceMessages")
includeModule("org.jetbrains.teamcity.idea", "annotations")
}
}
maven("https://dl.google.com/dl/android/maven2") {
content {
includeGroup("com.android.tools")
includeGroup("com.android.tools.build")
includeGroup("com.android.tools.layoutlib")
includeGroup("com.android")
includeGroup("androidx.test")
includeGroup("androidx.annotation")
}
}
mavenCentral()
@Suppress("DEPRECATION")
jcenter {
content {
includeVersionByRegex("net\\.rubygrapefruit", ".+", "0\\.14")
}
}
}
}
gradle.taskGraph.whenReady {
fun Boolean.toOnOff(): String = if (this) "on" else "off"
val profile = if (isTeamcityBuild) "CI" else "Local"
val proguardMessage = "proguard is ${kotlinBuildProperties.proguard.toOnOff()}"
val jarCompressionMessage = "jar compression is ${kotlinBuildProperties.jarCompression.toOnOff()}"
logger.warn(
"$profile build profile is active ($proguardMessage, $jarCompressionMessage). " +
"Use -Pteamcity=<true|false> to reproduce CI/local build"
)
allTasks.filterIsInstance<org.gradle.jvm.tasks.Jar>().forEach { task ->
task.entryCompression = if (kotlinBuildProperties.jarCompression)
ZipEntryCompression.DEFLATED
else
ZipEntryCompression.STORED
}
}
val dist = tasks.register("dist") {
dependsOn(":kotlin-compiler:dist")
}
val syncMutedTests = tasks.register("syncMutedTests") {
dependsOn(":compiler:tests-mutes:tc-integration:run")
}
tasks.register("createIdeaHomeForTests") {
val ideaBuildNumberFileForTests = ideaBuildNumberFileForTests()
val intellijSdkVersion = rootProject.extra["versions.intellijSdk"]
outputs.file(ideaBuildNumberFileForTests)
doFirst {
with(ideaBuildNumberFileForTests.get().asFile) {
parentFile.mkdirs()
writeText("IC-$intellijSdkVersion")
}
}
}
tasks {
register("compileAll") {
allprojects
.filter { !it.path.startsWith(":native") || kotlinBuildProperties.isKotlinNativeEnabled }
.forEach {
dependsOn(it.tasks.withType<KotlinCompilationTask<*>>())
dependsOn(it.tasks.withType<JavaCompile>())
}
}
named<Delete>("clean") {
delete(distDir)
delete(layout.buildDirectory.dir("repo"))
}
register<Delete>("cleanupArtifacts") {
delete = setOf(artifactsDir)
}
listOf("clean", "assemble", "install", "publish").forEach { taskName ->
register("coreLibs${taskName.capitalize()}") {
for (projectName in coreLibProjects) {
if (projectName.startsWith(":kotlin-test:") && (taskName == "install" || taskName == "publish")) continue
dependsOn("$projectName:$taskName")
}
}
}
register("coreLibsTest") {
(coreLibProjects + listOfNotNull(
":kotlin-stdlib:samples",
":kotlin-test:kotlin-test-js-it".takeIf { !kotlinBuildProperties.isInJpsBuildIdeaSync },
":kotlin-metadata-jvm",
":tools:binary-compatibility-validator",
":tools:jdk-api-validator",
)).forEach {
dependsOn("$it:check")
}
}
register("gradlePluginTest") {
gradlePluginProjects.forEach {
dependsOn("$it:check")
}
}
register("gradlePluginIntegrationTest") {
dependsOn(":kotlin-gradle-plugin-integration-tests:check")
}
register("jvmCompilerTest") {
dependsOn("dist")
dependsOn(
":compiler:tests-common-new:test",
":compiler:container:test",
":compiler:tests-java8:test",
":compiler:tests-spec:test",
":compiler:tests-against-klib:test"
)
}
register("testsForBootstrapBuildTest") {
dependsOn(":compiler:tests-common-new:test")
}
register("jvmCompilerIntegrationTest") {
dependsOn(
":kotlin-compiler-embeddable:test",
":kotlin-compiler-client-embeddable:test"
)
}
register("jsCompilerTest") {
dependsOn(":js:js.tests:jsTest")
dependsOn(":js:js.tests:runMocha")
dependsOn(":kotlin-test-js-runner:test")
}
register("jsFirCompilerTest") {
dependsOn(":js:js.tests:jsFirTest")
}
register("jsIrCompilerTest") {
dependsOn(":js:js.tests:jsIrTest")
dependsOn(":js:js.tests:jsStdlibApiTest")
}
register("wasmCompilerTest") {
dependsOn(":wasm:wasm.tests:testK1")
dependsOn(":wasm:wasm.tests:diagnosticTest")
// Windows WABT release requires Visual C++ Redistributable
if (!kotlinBuildProperties.isTeamcityBuild || !org.gradle.internal.os.OperatingSystem.current().isWindows) {
dependsOn(":wasm:wasm.ir:test")
}
}
register("wasmFirCompilerTest") {
dependsOn(":wasm:wasm.tests:testFir")
}
// These tests run Native compiler and will be run in many different compilation modes that the compiler supports:
// - different optimization modes
// - different cache policies
// - different GCs
// ...
register("nativeCompilerTest") {
dependsOn(":kotlin-atomicfu-compiler-plugin:nativeTest")
dependsOn(":native:analysis-api-klib-reader:check")
dependsOn(":native:native.tests:test")
dependsOn(":native:native.tests:driver:check")
dependsOn(":native:native.tests:stress:check")
dependsOn(":native:native.tests:klib-compatibility:check")
dependsOn(":native:objcexport-header-generator:check")
dependsOn(":native:swift:swift-export-standalone:test")
}
// These are unit tests of Native compiler
register("nativeCompilerUnitTest") {
dependsOn(":native:kotlin-native-utils:check")
if (kotlinBuildProperties.isKotlinNativeEnabled) {
dependsOn(":kotlin-native:Interop:Indexer:check")
dependsOn(":kotlin-native:Interop:StubGenerator:check")
dependsOn(":kotlin-native:backend.native:check")
}
}
register("firCompilerTest") {
dependsOn(":compiler:fir:raw-fir:psi2fir:test")
dependsOn(":compiler:fir:raw-fir:light-tree2fir:test")
dependsOn(":compiler:fir:analysis-tests:test")
dependsOn(":compiler:fir:analysis-tests:legacy-fir-tests:test")
dependsOn(":compiler:fir:fir2ir:aggregateTests")
}
register("nightlyFirCompilerTest") {
dependsOn(":compiler:fir:fir2ir:nightlyTests")
}
register("scriptingJvmTest") {
dependsOn("dist")
dependsOn(":kotlin-scripting-compiler:test")
dependsOn(":kotlin-scripting-common:test")
dependsOn(":kotlin-scripting-jvm:test")
dependsOn(":kotlin-scripting-jvm-host-test:test")
dependsOn(":plugins:scripting:scripting-tests:test")
dependsOn(":kotlin-scripting-dependencies:test")
dependsOn(":kotlin-scripting-dependencies-maven:test")
dependsOn(":kotlin-scripting-dependencies-maven-all:test")
// see comments on the task in kotlin-scripting-jvm-host-test
// dependsOn(":kotlin-scripting-jvm-host-test:embeddableTest")
dependsOn(":kotlin-main-kts-test:test")
}
register("scriptingK1JvmTest") {
dependsOn(":kotlin-scripting-compiler:testWithK1")
dependsOn(":kotlin-scripting-jvm-host-test:testWithK1")
dependsOn(":kotlin-main-kts-test:testWithK1")
dependsOn(":kotlin-scripting-jsr223-test:test")
dependsOn(":kotlin-scripting-jsr223-test:embeddableTest")
dependsOn(":kotlin-scripting-ide-services-test:test")
dependsOn(":kotlin-scripting-ide-services-test:embeddableTest")
}
register("scriptingTest") {
dependsOn("scriptingJvmTest")
dependsOn("scriptingK1JvmTest")
}
register("compilerTest") {
dependsOn("jvmCompilerTest")
dependsOn("jsCompilerTest")
dependsOn("miscCompilerTest")
}
register("miscCompilerTest") {
dependsOn(":compiler:test")
dependsOn("incrementalCompilationTest")
dependsOn("scriptingTest")
dependsOn("jvmCompilerIntegrationTest")
dependsOn("compilerPluginTest")
dependsOn(":kotlin-daemon-tests:test")
}
register("miscTest") {
dependsOn("coreLibsTest")
dependsOn("gradlePluginTest")
dependsOn("toolsTest")
dependsOn("examplesTest")
dependsOn(":kotlin-build-common:test")
dependsOn(":kotlin-build-common:testJUnit5")
dependsOn(":core:descriptors.runtime:test")
dependsOn(":kotlin-util-io:test")
dependsOn(":kotlin-util-klib:test")
dependsOn(":kotlin-util-klib-abi:test")
dependsOn(":generators:test")
}
register("incrementalCompilationTest") {
dependsOn(":compiler:incremental-compilation-impl:test")
dependsOn(":compiler:incremental-compilation-impl:testJvmICWithJdk11")
}
register("compilerPluginTest") {
dependsOn(":kotlin-allopen-compiler-plugin:test")
dependsOn(":kotlin-assignment-compiler-plugin:test")
dependsOn(":kotlin-atomicfu-compiler-plugin:test")
dependsOn(":plugins:fir-plugin-prototype:test")
dependsOn(":plugins:fir-plugin-prototype:fir-plugin-ic-test:test")
dependsOn(":kotlin-imports-dumper-compiler-plugin:test")
dependsOn(":plugins:jvm-abi-gen:test")
dependsOn(":plugins:js-plain-objects:compiler-plugin:test")
dependsOn(":kotlinx-serialization-compiler-plugin:test")
dependsOn(":kotlin-lombok-compiler-plugin:test")
dependsOn(":kotlin-noarg-compiler-plugin:test")
dependsOn(":kotlin-sam-with-receiver-compiler-plugin:test")
dependsOn(":kotlin-power-assert-compiler-plugin:test")
dependsOn(":plugins:plugins-interactions-testing:test")
}
register("toolsTest") {
dependsOn(":tools:kotlinp-jvm:test")
dependsOn(":native:kotlin-klib-commonizer:test")
dependsOn(":native:kotlin-klib-commonizer-api:test")
dependsOn(":kotlin-tooling-core:check")
dependsOn(":kotlin-tooling-metadata:check")
dependsOn(":compiler:build-tools:kotlin-build-tools-api:check")
dependsOn(":compiler:build-tools:kotlin-build-tools-api-tests:check")
dependsOn(":tools:ide-plugin-dependencies-validator:test")
}
register("examplesTest") {
dependsOn("dist")
project(":examples").subprojects.forEach { p ->
dependsOn("${p.path}:check")
}
}
register("distTest") {
dependsOn("compilerTest")
dependsOn("frontendApiTests")
dependsOn("toolsTest")
dependsOn("gradlePluginTest")
dependsOn("examplesTest")
}
register("specTest") {
dependsOn("dist")
dependsOn(":compiler:tests-spec:test")
}
register("androidCodegenTest") {
dependsOn(":compiler:android-tests:test")
}
register("jps-tests") {
dependsOn("dist")
dependsOn(":jps:jps-plugin:test")
}
register("frontendApiTests") {
dependsOn(":analysis:analysisAllTests")
}
register("kaptTests") {
dependsOn(":kotlin-annotation-processing:test")
dependsOn(":kotlin-annotation-processing:testJdk11")
dependsOn(":kotlin-annotation-processing-compiler:test")
dependsOn(":kotlin-annotation-processing-compiler:testJdk11")
dependsOn(":kotlin-annotation-processing-base:test")
dependsOn(":kotlin-annotation-processing-cli:test")
}
register("parcelizeTests") {
dependsOn(":plugins:parcelize:parcelize-compiler:test")
}
register("codebaseTests") {
dependsOn(":repo:codebase-tests:test")
}
register("statisticsTests") {
dependsOn(":kotlin-gradle-statistics:test")
}
register("test") {
doLast {
throw GradleException("Don't use directly, use aggregate tasks *-check instead")
}
}
named("check") {
dependsOn("test")
}
named("checkBuild") {
if (kotlinBuildProperties.isTeamcityBuild) {
val bootstrapKotlinVersion = bootstrapKotlinVersion
doFirst {
println("##teamcity[setParameter name='bootstrap.kotlin.version' value='$bootstrapKotlinVersion']")
}
}
}
register("publishGradlePluginArtifacts") {
idePluginDependency {
dependsOnKotlinGradlePluginPublish()
}
}
register("publishIdeArtifacts") {
idePluginDependency {
@Suppress("UNCHECKED_CAST")
dependsOn((rootProject.extra["compilerArtifactsForIde"] as List<String>).map { "$it:publish" })
}
}
register("installIdeArtifacts") {
idePluginDependency {
@Suppress("UNCHECKED_CAST")
dependsOn((rootProject.extra["compilerArtifactsForIde"] as List<String>).map { "$it:install" })
}
}
register<Exec>("mvnInstall") {
group = "publishing"
workingDir = rootProject.projectDir.resolve("libraries")
commandLine = getMvnwCmd() + listOf("clean", "install", "-DskipTests")
doFirst {
environment("JDK_1_8", getToolchainJdkHomeFor(JdkMajorVersion.JDK_1_8).get())
}
}
register<Exec>("mvnPublish") {
group = "publishing"
workingDir = rootProject.projectDir.resolve("libraries")
commandLine = getMvnwCmd() + listOf(
"clean", "deploy", "--activate-profiles=noTest",
"-Dinvoker.skip=true", "-DskipTests",
"-Ddeploy-snapshot-repo=local",
"-Ddeploy-snapshot-url=file://${rootProject.projectDir.resolve("build/repo")}"
)
doFirst {
environment("JDK_1_8", getToolchainJdkHomeFor(JdkMajorVersion.JDK_1_8).get())
}
}
}
val zipCompiler by tasks.registering(Zip::class) {
dependsOn(dist)
destinationDirectory.set(file(distDir))
archiveFileName.set("kotlin-compiler-$kotlinVersion.zip")
from(distKotlinHomeDir)
into("kotlinc")
doLast {
logger.lifecycle("Compiler artifacts packed to ${archiveFile.get().asFile.absolutePath}")
}
}
fun Project.secureZipTask(zipTask: TaskProvider<Zip>): RegisteringDomainObjectDelegateProviderWithAction<out TaskContainer, Task> {
val checkSumTask: TaskProvider<Checksum> = tasks.register("${zipTask.name}Checksum", Checksum::class) {
dependsOn(zipTask)
inputFiles.setFrom(zipTask.map { it.outputs.files.singleFile })
outputDirectory.fileProvider(zipTask.map { it.outputs.files.singleFile.parentFile.resolve("checksums") })
checksumAlgorithm.set(Checksum.Algorithm.SHA256)
}
// Don't use Copy task, because it declares the full destination directory as an output
val copyChecksumTask = tasks.register("${zipTask.name}ChecksumCopy") {
dependsOn(checkSumTask)
val checksumFileName: Provider<String> = zipTask.map { "${it.outputs.files.singleFile.name}.sha256" }
val checksumFile: Provider<RegularFile> = checkSumTask.map { it.outputDirectory.file(checksumFileName.get()).get() }
val outputFile: Provider<File> = zipTask.map { it.outputs.files.singleFile.parentFile.resolve(checksumFileName.get()) }
inputs.file(checksumFile)
outputs.file(outputFile)
doLast {
checksumFile.get().asFile.copyTo(outputFile.get(), overwrite = true)
}
}
val signTask = tasks.register("${zipTask.name}Sign", Sign::class) {
description = "Signs the archive produced by the '" + zipTask.name + "' task."
sign(zipTask.get())
}
return tasks.registering {
dependsOn(copyChecksumTask)
dependsOn(signTask)
}
}
signing {
useGpgCmd()
}
val zipCompilerWithSignature by secureZipTask(zipCompiler)
configure<IdeaModel> {
module {
excludeDirs = files(
project.layout.buildDirectory,
commonLocalDataDir,
".gradle",
"dependencies",
"dist",
"tmp",
"intellij"
).toSet()
}
}
val disableVerificationTasks = providers.gradleProperty("kotlin.build.disable.verification.tasks")
.orNull?.toBoolean() ?: false
if (disableVerificationTasks) {
logger.info("Verification tasks are disabled because `kotlin.build.disable.verification.tasks` is true")
gradle.taskGraph.whenReady {
allTasks.forEach {
if (it is VerificationTask) {
logger.info("Task ${it.path} is disabled because `kotlin.build.disable.verification.tasks` is true")
it.enabled = false
}
}
}
}
gradle.taskGraph.whenReady(checkYarnAndNPMSuppressed)
plugins.withType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin::class) {
extensions.configure(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension::class.java) {
if (kotlinBuildProperties.isCacheRedirectorEnabled) {
downloadBaseUrl = "https://cache-redirector.jetbrains.com/nodejs.org/dist"
}
npmInstallTaskProvider.configure {
args += listOf("--network-concurrency", "1", "--mutex", "network")
}
}
}
plugins.withType(com.github.gradle.node.NodePlugin::class) {
extensions.configure(com.github.gradle.node.NodeExtension::class) {
if (kotlinBuildProperties.isCacheRedirectorEnabled) {
distBaseUrl = "https://cache-redirector.jetbrains.com/nodejs.org/dist"
}
}
}
afterEvaluate {
if (kotlinBuildProperties.isCacheRedirectorEnabled) {
rootProject.plugins.withType(org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin::class.java) {
rootProject.the<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension>().downloadBaseUrl =
"https://cache-redirector.jetbrains.com/github.com/yarnpkg/yarn/releases/download"
rootProject.the<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension>().yarnLockMismatchReport =
YarnLockMismatchReport.WARNING
}
}
}
afterEvaluate {
checkExpectedGradlePropertyValues()
}
// workaround for KT-68482
tasks.withType<org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask>().configureEach {
notCompatibleWithConfigurationCache("KotlinNpmInstallTask is not compatible with Configuration Cache")
}
Kotlin
1
https://gitee.com/mirrors/kotlin.git
git@gitee.com:mirrors/kotlin.git
mirrors
kotlin
kotlin
master

搜索帮助