|
3 | 3 | import org.gradle.api.GradleException
|
4 | 4 | import org.gradle.api.Project
|
5 | 5 | import org.gradle.api.Task
|
6 |
| -import org.gradle.api.UnknownDomainObjectException |
7 | 6 | import org.gradle.api.artifacts.ConfigurablePublishArtifact
|
8 | 7 | import org.gradle.api.artifacts.Configuration
|
9 | 8 | import org.gradle.api.artifacts.ConfigurationContainer
|
| 9 | +import org.gradle.api.artifacts.component.ProjectComponentIdentifier |
10 | 10 | import org.gradle.api.file.DuplicatesStrategy
|
11 |
| -import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact |
| 11 | +import org.gradle.api.file.SourceDirectorySet |
12 | 12 | import org.gradle.api.plugins.BasePluginConvention
|
| 13 | +import org.gradle.api.plugins.JavaPluginConvention |
13 | 14 | import org.gradle.api.tasks.AbstractCopyTask
|
14 | 15 | import org.gradle.api.tasks.Copy
|
| 16 | +import org.gradle.api.tasks.TaskProvider |
15 | 17 | import org.gradle.api.tasks.Upload
|
16 | 18 | import org.gradle.api.tasks.javadoc.Javadoc
|
17 | 19 | import org.gradle.jvm.tasks.Jar
|
@@ -88,23 +90,32 @@ fun <T : Jar> Project.runtimeJar(task: T, body: T.() -> Unit = {}): T {
|
88 | 90 |
|
89 | 91 | fun Project.runtimeJar(body: Jar.() -> Unit = {}): Jar = runtimeJar(getOrCreateTask("jar", body), { })
|
90 | 92 |
|
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 | + }) |
103 | 108 | }
|
| 109 | + |
104 | 110 | body()
|
105 |
| - project.addArtifact("archives", this, this) |
106 | 111 | }
|
107 | 112 |
|
| 113 | + addArtifact("archives", task) |
| 114 | + addArtifact("sources", task) |
| 115 | + |
| 116 | + return task |
| 117 | +} |
| 118 | + |
108 | 119 | fun Project.javadocJar(body: Jar.() -> Unit = {}): Jar = getOrCreateTask("javadocJar") {
|
109 | 120 | duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
110 | 121 | classifier = "javadoc"
|
@@ -194,6 +205,11 @@ fun Project.addArtifact(configuration: Configuration, task: Task, artifactRef: A
|
194 | 205 | fun Project.addArtifact(configurationName: String, task: Task, artifactRef: Any, body: ConfigurablePublishArtifact.() -> Unit = {}) =
|
195 | 206 | addArtifact(configurations.getOrCreate(configurationName), task, artifactRef, body)
|
196 | 207 |
|
| 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 | + |
197 | 213 | fun Project.cleanArtifacts() {
|
198 | 214 | configurations["archives"].artifacts.let { artifacts ->
|
199 | 215 | artifacts.forEach {
|
|
0 commit comments