Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -714,7 +714,7 @@ class JavaPluginsTest : BasePluginTest() {
description = 'Create a combined JAR of project and test dependencies'
archiveClassifier = 'test'
from sourceSets.named('test').map { it.output }
configurations = project.configurations.named('testRuntimeClasspath').map { [it] }
setConfigurations([project.configurations.testRuntimeClasspath])
manifest {
attributes '$mainClassAttributeKey': 'my.Main'
}
Expand Down Expand Up @@ -751,7 +751,7 @@ class JavaPluginsTest : BasePluginTest() {
description = 'Create a combined JAR of project and test dependencies'
archiveClassifier = 'test'
from sourceSets.named('test').map { it.output }
configurations = project.configurations.named('testRuntimeClasspath').map { [it] }
setConfigurations([project.configurations.testRuntimeClasspath])
manifest {
attributes '$mainClassAttributeKey': 'my.Main'
}
Expand Down Expand Up @@ -795,7 +795,7 @@ class JavaPluginsTest : BasePluginTest() {
def $dependencyShadowJar = tasks.register('$dependencyShadowJar', ${ShadowJar::class.java.name}) {
description = 'Create a shadow JAR of all dependencies'
archiveClassifier = 'dep'
configurations = project.configurations.named('runtimeClasspath').map { [it] }
setConfigurations([project.configurations.runtimeClasspath])
}
"""
.trimIndent()
Expand Down Expand Up @@ -1185,7 +1185,7 @@ class JavaPluginsTest : BasePluginTest() {
}

$shadowJarTask {
configurations = [project.configurations.runtimeClasspath]
setConfigurations([project.configurations.runtimeClasspath])
}

configurations.runtimeClasspath {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@ class PublishingTest : BasePluginTest() {
description = 'Create a combined JAR of project and test dependencies'
archiveClassifier = 'tests'
from sourceSets.named('test').map { it.output }
configurations = project.configurations.named('testRuntimeClasspath').map { [it] }
setConfigurations([project.configurations.testRuntimeClasspath])
}
"""
.trimIndent(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ class RelocationTest : BasePluginTest() {
implementation 'junit:junit:3.8.2'
}
$shadowJarTask {
configurations = []
clearConfigurations()
relocate('', 'foo/')
}
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ constructor(private val softwareComponentFactory: SoftwareComponentFactory) : Pl
val taskProvider =
registerShadowJarCommon(tasks.named("jar", Jar::class.java)) { task ->
task.from(sourceSets.named("main").map { it.output })
task.configurations.convention(provider { listOf(runtimeConfiguration) })
task.addConfiguration(runtimeConfiguration)
}
artifacts.add(configurations.shadow.name, taskProvider)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@ public abstract class ShadowKmpPlugin : Plugin<Project> {
val kotlinJvmMain = target.compilations.named("main")
registerShadowJarCommon(tasks.named(target.artifactsTaskName, Jar::class.java)) { task ->
task.from(kotlinJvmMain.map { it.output.allOutputs })
task.configurations.convention(
provider {
listOf(configurations.getByName(kotlinJvmMain.get().runtimeDependencyConfigurationName))
}
task.addConfiguration(
configurations.getByName(kotlinJvmMain.get().runtimeDependencyConfigurationName)
)

if (!isAtLeastKgp("1.9.0")) return@registerShadowJarCommon
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ public abstract class ShadowJar : Jar() {
project.configurations.findByName(ShadowBasePlugin.CONFIGURATION_NAME) ?: project.files()
}

@Transient
private val _sourceConfigurations = mutableListOf<Configuration>()

init {
group = LifecycleBasePlugin.BUILD_GROUP
description = "Create a combined JAR of project and runtime dependencies"
Expand Down Expand Up @@ -101,7 +104,7 @@ public abstract class ShadowJar : Jar() {
@get:Classpath
public open val toMinimize: ConfigurableFileCollection = objectFactory.fileCollection {
minimizeJar.map {
if (it) (dependencyFilterForMinimize.resolve(configurations.get()) - apiJars) else emptySet()
if (it) (dependencyFilterForMinimize.resolve(_sourceConfigurations) - apiJars) else emptySet()
}
}

Expand Down Expand Up @@ -132,12 +135,34 @@ public abstract class ShadowJar : Jar() {
@get:Nested public open val relocators: SetProperty<Relocator> = objectFactory.setProperty()

/**
* The configurations to include dependencies from.
* The resolved files from configurations to include dependencies from.
*
* Do not add to this file collection directly. Use [addConfiguration], [setConfigurations],
* or [clearConfigurations] instead, so that dependency filtering works correctly.
*
* Defaults to a set that contains `runtimeClasspath` or `runtime` configuration.
*/
@get:Classpath
public open val configurations: SetProperty<Configuration> = objectFactory.setProperty()
public open val configurations: ConfigurableFileCollection = objectFactory.fileCollection()

/** Add a [Configuration] whose dependencies should be shadowed. */
public open fun addConfiguration(config: Configuration) {
_sourceConfigurations.add(config)
configurations.from(config)
}

/** Replace all configurations with the given set. */
public open fun setConfigurations(configs: Iterable<Configuration>) {
_sourceConfigurations.clear()
configurations.setFrom()
configs.forEach { addConfiguration(it) }
}

/** Remove all configurations. */
public open fun clearConfigurations() {
_sourceConfigurations.clear()
configurations.setFrom()
}

@get:Input
public open val dependencyFilter: Property<DependencyFilter> =
Expand All @@ -146,7 +171,7 @@ public abstract class ShadowJar : Jar() {
/** Final dependencies to be shadowed. */
@get:Classpath
public open val includedDependencies: ConfigurableFileCollection = objectFactory.fileCollection {
dependencyFilter.zip(configurations) { df, cs -> df.resolve(cs) }
dependencyFilter.map { df -> df.resolve(_sourceConfigurations) }
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ class ShadowPropertiesTest {
assertThat(mainClass.orNull).isNull()

assertThat(relocationPrefix.get()).isEqualTo(ShadowBasePlugin.SHADOW)
assertThat(configurations.get()).containsOnly(runtimeConfiguration)
assertThat(configurations.files).isEqualTo(runtimeConfiguration.files)
}
}

Expand Down
Loading