diff --git a/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts new file mode 100644 index 00000000000..10bb1d84bb2 --- /dev/null +++ b/buildSrc/src/main/kotlin/gradle-plugin-common-configuration.gradle.kts @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") +} + +publish() +standardPublicJars() + +extensions.extraProperties["kotlin.stdlib.default.dependency"] = "false" + +dependencies { + compileOnly(kotlinStdlib()) + compileOnly(gradleApi()) +} + +// These dependencies will be provided by Gradle and we should prevent version conflict +fun Configuration.excludeGradleCommonDependencies() { + exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib") + exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk7") + exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-jdk8") + exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib-common") + exclude(group = "org.jetbrains.kotlin", module = "kotlin-reflect") + exclude(group = "org.jetbrains.kotlin", module = "kotlin-script-runtime") +} +configurations { + "implementation" { + excludeGradleCommonDependencies() + } + "api" { + excludeGradleCommonDependencies() + } +} + +tasks.withType { + kotlinOptions.languageVersion = "1.3" + kotlinOptions.apiVersion = "1.3" + kotlinOptions.freeCompilerArgs += listOf( + "-Xskip-prerelease-check", + "-Xskip-runtime-version-check", + "-Xsuppress-version-warnings" + ) +} + +tasks.named("jar") { + callGroovy("manifestAttributes", manifest, project) +} diff --git a/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt b/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt index 299a5db958c..184b01829df 100644 --- a/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt @@ -72,6 +72,7 @@ class CodeConformanceTest : TestCase() { File("."), listOf( "build", + "buildSrc/build/generated-sources", "buildSrc/prepare-deps/build", "compiler/ir/serialization.js/build/fullRuntime", "compiler/ir/serialization.js/build/reducedRuntime/src/libraries/stdlib/js-ir/runtime/longjs.kt", @@ -97,6 +98,7 @@ class CodeConformanceTest : TestCase() { "libraries/stdlib/js-v1/node_modules", "libraries/stdlib/wasm/build", "libraries/tools/kotlin-gradle-plugin-integration-tests/build", + "libraries/tools/kotlin-gradle-plugin-integration-tests/.testKitDir", "libraries/tools/kotlin-maven-plugin-test/target", "libraries/tools/kotlin-test-js-runner/.gradle", "libraries/tools/kotlin-test-js-runner/lib", diff --git a/compiler/util-io/build.gradle.kts b/compiler/util-io/build.gradle.kts index fbe57abeef5..d0b2a2cd6a3 100644 --- a/compiler/util-io/build.gradle.kts +++ b/compiler/util-io/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } dependencies { - compile(kotlinStdlib()) + implementation(kotlinStdlib()) testImplementation(commonDep("junit:junit")) } diff --git a/libraries/tools/kotlin-gradle-build-metrics/build.gradle.kts b/libraries/tools/kotlin-gradle-build-metrics/build.gradle.kts index 23ab92f255c..18ceba29f1d 100644 --- a/libraries/tools/kotlin-gradle-build-metrics/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-build-metrics/build.gradle.kts @@ -1,13 +1,11 @@ description = "kotlin-gradle-statistics" plugins { - kotlin("jvm") + id("gradle-plugin-common-configuration") id("jps-compatible") } dependencies { - compileOnly(kotlinStdlib()) - testImplementation(project(":kotlin-test:kotlin-test-junit")) testImplementation("junit:junit:4.12") } @@ -20,8 +18,3 @@ sourceSets { projectTest { workingDir = rootDir } - -publish() - -sourcesJar() -javadocJar() \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts index dc68ce1e4a5..cb2c26d4e1b 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts @@ -1,20 +1,13 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.pill.PillExtension plugins { - kotlin("jvm") + id("gradle-plugin-common-configuration") id("jps-compatible") } -publish() - -standardPublicJars() - dependencies { - implementation(kotlinStdlib()) - implementation(project(":native:kotlin-native-utils")) + api(project(":native:kotlin-native-utils")) - compileOnly(gradleApi()) compileOnly("com.android.tools.build:gradle:3.4.0") compileOnly(project(":kotlin-project-model")) } @@ -22,19 +15,3 @@ dependencies { pill { variant = PillExtension.Variant.FULL } - -tasks { - withType { - kotlinOptions.languageVersion = "1.3" - kotlinOptions.apiVersion = "1.3" - kotlinOptions.freeCompilerArgs += listOf( - "-Xskip-prerelease-check", - "-Xskip-runtime-version-check", - "-Xsuppress-version-warnings" - ) - } - - named("jar") { - callGroovy("manifestAttributes", manifest, project) - } -} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt index a22ae64f1b6..a8b495dd57d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SimpleKotlinGradleIT.kt @@ -178,4 +178,33 @@ class SimpleKotlinGradleIT : KGPBaseTest() { } } } + + @GradleTest + @DisplayName("Should not produce kotlin-stdlib version conflict on Kotlin files compilation in 'buildSrc' module") + internal fun testKotlinDslStdlibVersionConflict(gradleVersion: GradleVersion) { + project( + projectName = "buildSrcUsingKotlinCompilationAndKotlinPlugin", + gradleVersion, + forceOutput = true + ) { + listOf( + "compileClasspath", + "compileOnly", + "runtimeClasspath" + ).forEach { configuration -> + build("-p", "buildSrc", "dependencies", "--configuration", configuration) { + listOf( + "org.jetbrains.kotlin:kotlin-stdlib:${buildOptions.kotlinVersion}", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${buildOptions.kotlinVersion}", + "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${buildOptions.kotlinVersion}", + "org.jetbrains.kotlin:kotlin-stdlib-common:${buildOptions.kotlinVersion}", + "org.jetbrains.kotlin:kotlin-reflect:${buildOptions.kotlinVersion}", + "org.jetbrains.kotlin:kotlin-script-runtime:${buildOptions.kotlinVersion}" + ).forEach { assertOutputDoesNotContain(it) } + } + } + + build("assemble") + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/build.gradle.kts new file mode 100644 index 00000000000..274be350f5a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + kotlin("jvm") +} + +repositories { + mavenLocal() + mavenCentral() +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/build.gradle.kts new file mode 100644 index 00000000000..f23198d0617 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + `kotlin-dsl` +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${property("kotlin_version")}") +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/src/main/kotlin/ProjectExt.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/src/main/kotlin/ProjectExt.kt new file mode 100644 index 00000000000..0f5e46e6410 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/buildSrc/src/main/kotlin/ProjectExt.kt @@ -0,0 +1,3 @@ +import org.gradle.api.Project + +fun Project.nameLength() = name.length diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/src/main/kotlin/main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/src/main/kotlin/main.kt new file mode 100644 index 00000000000..0f4f205330f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/buildSrcUsingKotlinCompilationAndKotlinPlugin/src/main/kotlin/main.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +fun main() { + println("Hello World!") +} diff --git a/libraries/tools/kotlin-gradle-plugin-model/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-model/build.gradle.kts index 4ce6cbf8cd5..3baa3c8c19f 100644 --- a/libraries/tools/kotlin-gradle-plugin-model/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-model/build.gradle.kts @@ -1,33 +1,10 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.pill.PillExtension plugins { - kotlin("jvm") + id("gradle-plugin-common-configuration") id("jps-compatible") } -publish() - -standardPublicJars() - -dependencies { - compile(kotlinStdlib()) -} - pill { variant = PillExtension.Variant.FULL } - -tasks { - withType { - kotlinOptions.languageVersion = "1.3" - kotlinOptions.apiVersion = "1.3" - kotlinOptions.freeCompilerArgs += listOf( - "-Xskip-prerelease-check", "-Xsuppress-version-warnings" - ) - } - - named("jar") { - callGroovy("manifestAttributes", manifest, project) - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index f36f55a6f47..ee85b4a1478 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -1,11 +1,10 @@ import org.jetbrains.dokka.gradle.DokkaTask -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.pill.PillExtension plugins { java - kotlin("jvm") `java-gradle-plugin` + id("gradle-plugin-common-configuration") id("org.jetbrains.dokka") id("jps-compatible") } @@ -17,13 +16,8 @@ configure { isAutomatedPublishing = false } -publish() - val jarContents by configurations.creating -sourcesJar() -javadocJar() - repositories { google() maven("https://plugins.gradle.org/m2/") @@ -40,7 +34,6 @@ dependencies { compileOnly(project(":compiler:incremental-compilation-impl")) compileOnly(project(":daemon-common")) - implementation(kotlinStdlib()) implementation(project(":kotlin-util-klib")) implementation(project(":native:kotlin-klib-commonizer-api")) implementation(project(":kotlin-tooling-metadata")) @@ -70,8 +63,7 @@ dependencies { compileOnly("com.android.tools.build:builder:3.4.0") compileOnly("com.android.tools.build:builder-model:3.4.0") compileOnly("org.codehaus.groovy:groovy-all:2.4.12") - compileOnly(gradleApi()) - + compileOnly(project(":kotlin-reflect")) compileOnly(intellijCoreDep()) { includeJars("intellij-core") } runtimeOnly(projectRuntimeJar(":kotlin-compiler-embeddable")) @@ -80,7 +72,6 @@ dependencies { runtimeOnly(projectRuntimeJar(":kotlin-compiler-runner")) runtimeOnly(projectRuntimeJar(":kotlin-scripting-compiler-embeddable")) runtimeOnly(projectRuntimeJar(":kotlin-scripting-compiler-impl-embeddable")) - runtimeOnly(project(":kotlin-reflect")) jarContents(compileOnly(intellijDep()) { includeJars("asm-all", "gson", "guava", "serviceMessages", rootProject = rootProject) @@ -124,17 +115,6 @@ runtimeJar(rewriteDefaultJarDepsToShadedCompiler()).configure { } tasks { - withType { - kotlinOptions.jdkHome = rootProject.extra["JDK_18"] as String - kotlinOptions.languageVersion = "1.3" - kotlinOptions.apiVersion = "1.3" - kotlinOptions.freeCompilerArgs += listOf( - "-Xskip-prerelease-check", - "-Xskip-runtime-version-check", - "-Xsuppress-version-warnings" - ) - } - named("processResources") { val propertiesToExpand = mapOf( "projectVersion" to project.version, @@ -148,10 +128,6 @@ tasks { } } - named("jar") { - callGroovy("manifestAttributes", manifest, project) - } - withType().configureEach { failOnWarning.set(true) enableStricterValidation.set(true) diff --git a/libraries/tools/kotlin-gradle-statistics/build.gradle.kts b/libraries/tools/kotlin-gradle-statistics/build.gradle.kts index 87462cdb2da..18ceba29f1d 100644 --- a/libraries/tools/kotlin-gradle-statistics/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-statistics/build.gradle.kts @@ -1,15 +1,13 @@ description = "kotlin-gradle-statistics" plugins { - kotlin("jvm") + id("gradle-plugin-common-configuration") id("jps-compatible") } dependencies { - compileOnly(kotlinStdlib()) - - testCompile(project(":kotlin-test:kotlin-test-junit")) - testCompile("junit:junit:4.12") + testImplementation(project(":kotlin-test:kotlin-test-junit")) + testImplementation("junit:junit:4.12") } sourceSets { diff --git a/native/utils/build.gradle.kts b/native/utils/build.gradle.kts index 3ff3a832b60..94f1259ade0 100644 --- a/native/utils/build.gradle.kts +++ b/native/utils/build.gradle.kts @@ -7,11 +7,11 @@ description = "Kotlin/Native utils" dependencies { compileOnly(kotlinStdlib()) - compile(project(":kotlin-util-io")) + api(project(":kotlin-util-io")) - testCompile(commonDep("junit:junit")) + testImplementation(commonDep("junit:junit")) testCompileOnly(project(":kotlin-reflect-api")) - testRuntime(project(":kotlin-reflect")) + testImplementation(project(":kotlin-reflect")) } sourceSets {