Build: Improve sourcesJar helper

- Add sources from embedded projects
 - Add artifact to sources configuration
 - Use register instead of create

 #KT-30237 Fixed
This commit is contained in:
Vyacheslav Gerasimov
2019-06-02 00:28:21 +03:00
parent 547b10ee29
commit 2769dc8359
2 changed files with 37 additions and 16 deletions
+31 -15
View File
@@ -3,15 +3,17 @@
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.Task import org.gradle.api.Task
import org.gradle.api.UnknownDomainObjectException
import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.ConfigurablePublishArtifact
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.file.DuplicatesStrategy 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.BasePluginConvention
import org.gradle.api.plugins.JavaPluginConvention
import org.gradle.api.tasks.AbstractCopyTask import org.gradle.api.tasks.AbstractCopyTask
import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.Upload import org.gradle.api.tasks.Upload
import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.jvm.tasks.Jar import org.gradle.jvm.tasks.Jar
@@ -88,23 +90,32 @@ fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { }) fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { })
fun Project.sourcesJar(sourceSet: String? = "main", body: Jar.() -> Unit = {}): Jar = fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> {
getOrCreateTask("sourcesJar") { val task = tasks.register<Jar>("sourcesJar") {
setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE) duplicatesStrategy = DuplicatesStrategy.EXCLUDE
classifier = "sources" archiveClassifier.set("sources")
try {
if (sourceSet != null) { from(project.mainSourceSet.allSource)
project.pluginManager.withPlugin("java-base") {
from(project.javaPluginConvention().sourceSets[sourceSet].allSource) project.configurations.findByName("embedded")?.let { embedded ->
} from(provider {
} embedded.resolvedConfiguration
} catch (e: UnknownDomainObjectException) { .resolvedArtifacts
// skip default sources location .map { it.id.componentIdentifier }
.filterIsInstance<ProjectComponentIdentifier>()
.map { project(it.projectPath).mainSourceSet.allSource }
})
} }
body() body()
project.addArtifact("archives", this, this)
} }
addArtifact("archives", task)
addArtifact("sources", task)
return task
}
fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") { fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
classifier = "javadoc" 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 = {}) = fun Project.addArtifact(configurationName: String, task: Task, artifactRef: Any, body: ConfigurablePublishArtifact.() -> Unit = {}) =
addArtifact(configurations.getOrCreate(configurationName), task, artifactRef, body) addArtifact(configurations.getOrCreate(configurationName), task, artifactRef, body)
fun <T : Task> Project.addArtifact(configurationName: String, task: TaskProvider<T>, body: ConfigurablePublishArtifact.() -> Unit = {}) {
configurations.maybeCreate(configurationName)
artifacts.add(configurationName, task, body)
}
fun Project.cleanArtifacts() { fun Project.cleanArtifacts() {
configurations["archives"].artifacts.let { artifacts -> configurations["archives"].artifacts.let { artifacts ->
artifacts.forEach { artifacts.forEach {
+6 -1
View File
@@ -177,12 +177,17 @@ val relocateCoreSources by task<Copy> {
tasks.getByName("jar").enabled = false tasks.getByName("jar").enabled = false
val sourcesJar = sourcesJar(sourceSet = null) { val sourcesJar = tasks.register<Jar>("sourcesJar") {
archiveClassifier.set("sources")
dependsOn(relocateCoreSources) dependsOn(relocateCoreSources)
from(relocatedCoreSrc) from(relocatedCoreSrc)
from("$core/reflection.jvm/src") from("$core/reflection.jvm/src")
} }
addArtifact("archives", sourcesJar)
addArtifact("sources", sourcesJar)
val result by task<Jar> { val result by task<Jar> {
dependsOn(proguard) dependsOn(proguard)
from(zipTree(file(proguardOutput))) from(zipTree(file(proguardOutput)))