Skip to content

Commit 2769dc8

Browse files
committed
Build: Improve sourcesJar helper
- Add sources from embedded projects - Add artifact to sources configuration - Use register instead of create #KT-30237 Fixed
1 parent 547b10e commit 2769dc8

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed

buildSrc/src/main/kotlin/artifacts.kt

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@
33
import org.gradle.api.GradleException
44
import org.gradle.api.Project
55
import org.gradle.api.Task
6-
import org.gradle.api.UnknownDomainObjectException
76
import org.gradle.api.artifacts.ConfigurablePublishArtifact
87
import org.gradle.api.artifacts.Configuration
98
import org.gradle.api.artifacts.ConfigurationContainer
9+
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
1010
import org.gradle.api.file.DuplicatesStrategy
11-
import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact
11+
import org.gradle.api.file.SourceDirectorySet
1212
import org.gradle.api.plugins.BasePluginConvention
13+
import org.gradle.api.plugins.JavaPluginConvention
1314
import org.gradle.api.tasks.AbstractCopyTask
1415
import org.gradle.api.tasks.Copy
16+
import org.gradle.api.tasks.TaskProvider
1517
import org.gradle.api.tasks.Upload
1618
import org.gradle.api.tasks.javadoc.Javadoc
1719
import org.gradle.jvm.tasks.Jar
@@ -88,23 +90,32 @@ fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
8890

8991
fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { })
9092

91-
fun Project.sourcesJar(sourceSet: String? = "main", body: Jar.() -> Unit = {}): Jar =
92-
getOrCreateTask("sourcesJar") {
93-
setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE)
94-
classifier = "sources"
95-
try {
96-
if (sourceSet != null) {
97-
project.pluginManager.withPlugin("java-base") {
98-
from(project.javaPluginConvention().sourceSets[sourceSet].allSource)
99-
}
100-
}
101-
} catch (e: UnknownDomainObjectException) {
102-
// skip default sources location
93+
fun Project.sourcesJar(body: Jar.() -> Unit = {}): TaskProvider<Jar> {
94+
val task = tasks.register<Jar>("sourcesJar") {
95+
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
96+
archiveClassifier.set("sources")
97+
98+
from(project.mainSourceSet.allSource)
99+
100+
project.configurations.findByName("embedded")?.let { embedded ->
101+
from(provider {
102+
embedded.resolvedConfiguration
103+
.resolvedArtifacts
104+
.map { it.id.componentIdentifier }
105+
.filterIsInstance<ProjectComponentIdentifier>()
106+
.map { project(it.projectPath).mainSourceSet.allSource }
107+
})
103108
}
109+
104110
body()
105-
project.addArtifact("archives", this, this)
106111
}
107112

113+
addArtifact("archives", task)
114+
addArtifact("sources", task)
115+
116+
return task
117+
}
118+
108119
fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") {
109120
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
110121
classifier = "javadoc"
@@ -194,6 +205,11 @@ fun Project.addArtifact(configuration: Configuration, task: Task, artifactRef: A
194205
fun Project.addArtifact(configurationName: String, task: Task, artifactRef: Any, body: ConfigurablePublishArtifact.() -> Unit = {}) =
195206
addArtifact(configurations.getOrCreate(configurationName), task, artifactRef, body)
196207

208+
fun <T : Task> Project.addArtifact(configurationName: String, task: TaskProvider<T>, body: ConfigurablePublishArtifact.() -> Unit = {}) {
209+
configurations.maybeCreate(configurationName)
210+
artifacts.add(configurationName, task, body)
211+
}
212+
197213
fun Project.cleanArtifacts() {
198214
configurations["archives"].artifacts.let { artifacts ->
199215
artifacts.forEach {

libraries/reflect/build.gradle.kts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,17 @@ val relocateCoreSources by task<Copy> {
177177

178178
tasks.getByName("jar").enabled = false
179179

180-
val sourcesJar = sourcesJar(sourceSet = null) {
180+
val sourcesJar = tasks.register<Jar>("sourcesJar") {
181+
archiveClassifier.set("sources")
182+
181183
dependsOn(relocateCoreSources)
182184
from(relocatedCoreSrc)
183185
from("$core/reflection.jvm/src")
184186
}
185187

188+
addArtifact("archives", sourcesJar)
189+
addArtifact("sources", sourcesJar)
190+
186191
val result by task<Jar> {
187192
dependsOn(proguard)
188193
from(zipTree(file(proguardOutput)))

0 commit comments

Comments
 (0)