diff --git a/buildSrc/src/main/kotlin/artifacts.kt b/buildSrc/src/main/kotlin/artifacts.kt index f9b5422919e..7f8277f8ce7 100644 --- a/buildSrc/src/main/kotlin/artifacts.kt +++ b/buildSrc/src/main/kotlin/artifacts.kt @@ -3,15 +3,17 @@ import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.Task -import org.gradle.api.UnknownDomainObjectException import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ConfigurationContainer +import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.file.DuplicatesStrategy -import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact +import org.gradle.api.file.SourceDirectorySet import org.gradle.api.plugins.BasePluginConvention +import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.tasks.AbstractCopyTask import org.gradle.api.tasks.Copy +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.Upload import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.jvm.tasks.Jar @@ -88,23 +90,32 @@ fun Project.runtimeJar(task: T, body: T.() -> Unit = {}): T { fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { }) -fun Project.sourcesJar(sourceSet: String? = "main", body: Jar.() -> Unit = {}): Jar = - getOrCreateTask("sourcesJar") { - setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE) - classifier = "sources" - try { - if (sourceSet != null) { - project.pluginManager.withPlugin("java-base") { - from(project.javaPluginConvention().sourceSets[sourceSet].allSource) - } - } - } catch (e: UnknownDomainObjectException) { - // skip default sources location +fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider { + val task = tasks.register("sourcesJar") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + archiveClassifier.set("sources") + + from(project.mainSourceSet.allSource) + + project.configurations.findByName("embedded")?.let { embedded -> + from(provider { + embedded.resolvedConfiguration + .resolvedArtifacts + .map { it.id.componentIdentifier } + .filterIsInstance() + .map { project(it.projectPath).mainSourceSet.allSource } + }) } + body() - project.addArtifact("archives", this, this) } + addArtifact("archives", task) + addArtifact("sources", task) + + return task +} + fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") { duplicatesStrategy = DuplicatesStrategy.EXCLUDE classifier = "javadoc" @@ -194,6 +205,11 @@ fun Project.addArtifact(configuration: Configuration, task: Task, artifactRef: A fun Project.addArtifact(configurationName: String, task: Task, artifactRef: Any, body: ConfigurablePublishArtifact.() -> Unit = {}) = addArtifact(configurations.getOrCreate(configurationName), task, artifactRef, body) +fun Project.addArtifact(configurationName: String, task: TaskProvider, body: ConfigurablePublishArtifact.() -> Unit = {}) { + configurations.maybeCreate(configurationName) + artifacts.add(configurationName, task, body) +} + fun Project.cleanArtifacts() { configurations["archives"].artifacts.let { artifacts -> artifacts.forEach { diff --git a/libraries/reflect/build.gradle.kts b/libraries/reflect/build.gradle.kts index a428af9ec28..97ae9ef827c 100644 --- a/libraries/reflect/build.gradle.kts +++ b/libraries/reflect/build.gradle.kts @@ -177,12 +177,17 @@ val relocateCoreSources by task { tasks.getByName("jar").enabled = false -val sourcesJar = sourcesJar(sourceSet = null) { +val sourcesJar = tasks.register("sourcesJar") { + archiveClassifier.set("sources") + dependsOn(relocateCoreSources) from(relocatedCoreSrc) from("$core/reflection.jvm/src") } +addArtifact("archives", sourcesJar) +addArtifact("sources", sourcesJar) + val result by task { dependsOn(proguard) from(zipTree(file(proguardOutput)))