diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index b7abb85de61..1e3d8bd1450 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -9,6 +9,7 @@ import org.gradle.api.Project import org.gradle.api.invocation.Gradle import org.gradle.api.logging.Logger import org.gradle.api.tasks.bundling.AbstractArchiveTask +import org.gradle.api.tasks.bundling.Zip import org.gradle.jvm.tasks.Jar import org.gradle.workers.WorkQueue import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter @@ -397,7 +398,7 @@ internal open class GradleCompilerRunner( if (sourceSetName != KotlinCompilation.MAIN_COMPILATION_NAME) return null val jarTaskName = project.extensions.findByType()?.js()?.artifactsTaskName - val jarTask = jarTaskName?.let { project.tasks.findByName(jarTaskName) } as? Jar + val jarTask = jarTaskName?.let { project.tasks.findByName(jarTaskName) } as? Zip return jarTask?.archiveFile?.get()?.asFile } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index d2b2aa8c532..b9fe2b60b40 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -282,6 +282,9 @@ abstract class KotlinOnlyTargetConfigurator(createTestCompilation) { open val archiveType: String = ArtifactTypeDefinition.JAR_TYPE + open val archiveTaskType: Class + get() = Jar::class.java + internal abstract fun buildCompilationProcessor(compilation: KotlinCompilationType): KotlinCompilationProcessor<*> override fun configureCompilations(target: KotlinTargetType) { @@ -297,8 +300,10 @@ abstract class KotlinOnlyTargetConfigurator { - //TODO Change Jar on Zip - return target.project.registerTask(target.artifactsTaskName) { + return target.project.registerTask( + target.artifactsTaskName, + archiveTaskType + ) { it.description = "Assembles an archive containing the main classes." it.group = BasePlugin.BUILD_GROUP it.from(target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).output.allOutputs) @@ -397,7 +402,7 @@ internal fun Project.usageByName(usageName: String): Usage = internal fun Project.categoryByName(categoryName: String): Category = objects.named(Category::class.java, categoryName) -internal inline fun Project.attributeValueByName(attributeValueName: String): T = +internal inline fun Project.attributeValueByName(attributeValueName: String): T = objects.named(T::class.java, attributeValueName) fun Configuration.usesPlatformOf(target: KotlinTarget): Configuration { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt index 3fede01b518..8217a41591c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfiguration.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.gradle.utils.getByType internal interface BasePluginConfiguration { val archivesName: Property val distsDirectory: DirectoryProperty + val libsDirectory: DirectoryProperty interface BasePluginConfigurationVariantFactory : VariantImplementationFactories.VariantImplementationFactory { fun getInstance(project: Project): BasePluginConfiguration @@ -40,4 +41,7 @@ internal class DefaultBasePluginConfiguration( override val distsDirectory: DirectoryProperty get() = basePluginExtension.distsDirectory + + override val libsDirectory: DirectoryProperty + get() = basePluginExtension.libsDirectory } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt index 1fcd6ee0c16..56255ae7fb3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/util/Utils.kt @@ -41,3 +41,14 @@ val Project.distsDirectory .variantImplementationFactory() .getInstance(this) .distsDirectory + +/** + * Returns the directory to generate JAR archives into. + * + * @return The directory. Never returns null. + */ +val Project.libsDirectory + get() = gradle + .variantImplementationFactory() + .getInstance(this) + .libsDirectory diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt index 26d582a7e02..e210cbe33d2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt @@ -8,11 +8,12 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.attributes.Usage import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.Zip -import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions import org.jetbrains.kotlin.gradle.dsl.JsModuleKind import org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode +import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.libsDirectory import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry @@ -27,6 +28,9 @@ open class KotlinJsIrTargetConfigurator() : override val archiveType: String get() = KLIB_TYPE + override val archiveTaskType: Class + get() = Zip::class.java + override fun createTestRun( name: String, target: KotlinJsIrTarget @@ -61,7 +65,10 @@ open class KotlinJsIrTargetConfigurator() : override fun createArchiveTasks(target: KotlinJsIrTarget): TaskProvider { return super.createArchiveTasks(target).apply { - configure { it.archiveExtension.set(KLIB_TYPE) } + configure { + it.archiveExtension.set(KLIB_TYPE) + it.destinationDirectory.set(it.project.libsDirectory) + } } } @@ -71,7 +78,7 @@ open class KotlinJsIrTargetConfigurator() : target.compilations.all { compilation -> compilation.compilerOptions.configure { configureOptions() - + if (target.platformType == KotlinPlatformType.wasm) { freeCompilerArgs.add(WASM_BACKEND) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt index cc63b50a20d..2ebf78b4601 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/gradle70/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG70.kt @@ -25,6 +25,9 @@ internal class BasePluginConfigurationG70( override val distsDirectory: DirectoryProperty get() = basePluginConvention.distsDirectory + override val libsDirectory: DirectoryProperty + get() = basePluginConvention.libsDirectory + internal class BasePluginConfigurationVariantFactoryG70 : BasePluginConfiguration.BasePluginConfigurationVariantFactory { override fun getInstance(project: Project): BasePluginConfiguration { return BasePluginConfigurationG70( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt index f08199c6676..037308f4ee9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/internal/BasePluginConfigurationG6.kt @@ -25,6 +25,9 @@ internal class BasePluginConfigurationG6( override val distsDirectory: DirectoryProperty get() = basePluginConvention.distsDirectory + override val libsDirectory: DirectoryProperty + get() = basePluginConvention.libsDirectory + internal class BasePluginConfigurationVariantFactoryG6 : BasePluginConfiguration.BasePluginConfigurationVariantFactory { override fun getInstance(project: Project): BasePluginConfiguration { return BasePluginConfigurationG6(