Skip to content

Commit

Permalink
Add extensions for project ExtensionContainer
Browse files Browse the repository at this point in the history
  • Loading branch information
Goooler committed Jan 29, 2025
1 parent 046dce5 commit 79024b7
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.github.jengelman.gradle.plugins.shadow

import com.github.jengelman.gradle.plugins.shadow.internal.applicationExtension
import com.github.jengelman.gradle.plugins.shadow.internal.distributions
import com.github.jengelman.gradle.plugins.shadow.internal.javaPluginExtension
import com.github.jengelman.gradle.plugins.shadow.internal.javaToolchainService
import com.github.jengelman.gradle.plugins.shadow.internal.requireResourceAsText
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.distribution.DistributionContainer
import org.gradle.api.plugins.ApplicationPlugin
import org.gradle.api.plugins.JavaApplication
import org.gradle.api.plugins.JavaPluginExtension
Expand All @@ -19,10 +22,14 @@ import org.gradle.jvm.toolchain.JavaToolchainService
public abstract class ShadowApplicationPlugin : Plugin<Project> {
private lateinit var project: Project
private lateinit var javaApplication: JavaApplication
private lateinit var javaPluginExtension: JavaPluginExtension
private lateinit var javaToolchainService: JavaToolchainService

override fun apply(project: Project) {
this.project = project
this.javaApplication = project.extensions.getByType(JavaApplication::class.java)
this.javaApplication = project.applicationExtension
this.javaPluginExtension = project.javaPluginExtension
this.javaToolchainService = project.javaToolchainService

addRunTask()
addCreateScriptsTask()
Expand Down Expand Up @@ -56,9 +63,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
task.classpath(jarFile)
task.mainClass.set(javaApplication.mainClass)
task.conventionMapping.map("jvmArgs", javaApplication::getApplicationDefaultJvmArgs)
val toolchain = project.extensions.getByType(JavaPluginExtension::class.java).toolchain
val defaultLauncher = project.extensions.getByType(JavaToolchainService::class.java).launcherFor(toolchain)
task.javaLauncher.set(defaultLauncher)
task.javaLauncher.set(javaToolchainService.launcherFor(javaPluginExtension.toolchain))
}
}

Expand Down Expand Up @@ -86,7 +91,6 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
task.conventionMapping.map("outputDir") { project.layout.buildDirectory.dir("scriptsShadow").get().asFile }
task.conventionMapping.map("executableDir", javaApplication::getExecutableDir)
task.conventionMapping.map("defaultJvmOpts", javaApplication::getApplicationDefaultJvmArgs)
val javaPluginExtension = project.extensions.getByType(JavaPluginExtension::class.java)
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
}
}
Expand Down Expand Up @@ -121,20 +125,19 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
}

protected open fun configureDistSpec() {
project.extensions.getByType(DistributionContainer::class.java)
.register(ShadowBasePlugin.DISTRIBUTION_NAME) { distributions ->
distributions.contents { contents ->
contents.from(project.file("src/dist"))
contents.into("lib") { lib ->
lib.from(shadowJar)
lib.from(project.configurations.named(ShadowBasePlugin.CONFIGURATION_NAME))
}
contents.into("bin") { bin ->
bin.from(project.tasks.named(SHADOW_SCRIPTS_TASK_NAME))
bin.filePermissions { it.unix(493) }
}
project.distributions.register(ShadowBasePlugin.DISTRIBUTION_NAME) { distributions ->
distributions.contents { contents ->
contents.from(project.file("src/dist"))
contents.into("lib") { lib ->
lib.from(shadowJar)
lib.from(project.configurations.named(ShadowBasePlugin.CONFIGURATION_NAME))
}
contents.into("bin") { bin ->
bin.from(project.tasks.named(SHADOW_SCRIPTS_TASK_NAME))
bin.filePermissions { it.unix(493) }
}
}
}
}

protected val shadowJar: TaskProvider<ShadowJar>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.github.jengelman.gradle.plugins.shadow

import com.github.jengelman.gradle.plugins.shadow.internal.javaPluginExtension
import com.github.jengelman.gradle.plugins.shadow.internal.runtimeConfiguration
import com.github.jengelman.gradle.plugins.shadow.internal.sourceSets
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import javax.inject.Inject
import org.gradle.api.Plugin
Expand All @@ -14,8 +16,6 @@ import org.gradle.api.attributes.java.TargetJvmVersion
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.component.SoftwareComponentFactory
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.gradle.plugin.devel.plugins.JavaGradlePluginPlugin
Expand Down Expand Up @@ -45,7 +45,7 @@ public abstract class ShadowJavaPlugin @Inject constructor(
)
attr.attribute(Bundling.BUNDLING_ATTRIBUTE, project.objects.named(Bundling::class.java, Bundling.SHADOWED))
val targetJvmVersion = project.provider {
project.extensions.getByType(JavaPluginExtension::class.java).targetCompatibility.majorVersion.toInt()
project.javaPluginExtension.targetCompatibility.majorVersion.toInt()
}
// Track JavaPluginExtension to update targetJvmVersion when it changes.
attr.attributeProvider(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, targetJvmVersion)
Expand Down Expand Up @@ -80,7 +80,6 @@ public abstract class ShadowJavaPlugin @Inject constructor(
}

private fun configureShadowTask(project: Project, shadowConfiguration: Configuration): TaskProvider<ShadowJar> {
val sourceSets = project.extensions.getByType(SourceSetContainer::class.java)
val jarTask = project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar::class.java)
val taskProvider = project.tasks.register(SHADOW_JAR_TASK_NAME, ShadowJar::class.java) { shadow ->
shadow.group = ShadowBasePlugin.GROUP_NAME
Expand All @@ -96,7 +95,7 @@ public abstract class ShadowJavaPlugin @Inject constructor(
shadow.manifest.attributes["Class-Path"] = attrs.joinToString(" ").trim()
}
}
shadow.from(sourceSets.named("main").map { it.output })
shadow.from(project.sourceSets.named("main").map { it.output })
shadow.configurations.convention(listOf(project.runtimeConfiguration))
shadow.exclude(
"META-INF/INDEX.LIST",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,18 @@ package com.github.jengelman.gradle.plugins.shadow.internal
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.distribution.DistributionContainer
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.model.ObjectFactory
import org.gradle.api.plugins.JavaApplication
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.jvm.toolchain.JavaToolchainService
import org.gradle.util.GradleVersion

/**
Expand All @@ -21,6 +26,21 @@ internal inline val Project.runtimeConfiguration: Configuration
?: configurations.getByName("runtime")
}

internal inline val Project.sourceSets: SourceSetContainer
get() = extensions.getByType(SourceSetContainer::class.java)

internal inline val Project.distributions: DistributionContainer
get() = extensions.getByType(DistributionContainer::class.java)

internal inline val Project.applicationExtension: JavaApplication
get() = extensions.getByType(JavaApplication::class.java)

internal inline val Project.javaPluginExtension: JavaPluginExtension
get() = extensions.getByType(JavaPluginExtension::class.java)

internal inline val Project.javaToolchainService: JavaToolchainService
get() = extensions.getByType(JavaToolchainService::class.java)

internal inline fun <reified V : Any> ObjectFactory.property(
defaultValue: Any? = null,
): Property<V> = property(V::class.java).apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.github.jengelman.gradle.plugins.shadow.internal.ZipCompressor
import com.github.jengelman.gradle.plugins.shadow.internal.fileCollection
import com.github.jengelman.gradle.plugins.shadow.internal.property
import com.github.jengelman.gradle.plugins.shadow.internal.setProperty
import com.github.jengelman.gradle.plugins.shadow.internal.sourceSets
import com.github.jengelman.gradle.plugins.shadow.relocation.CacheableRelocator
import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator
import com.github.jengelman.gradle.plugins.shadow.relocation.SimpleRelocator
Expand Down Expand Up @@ -43,7 +44,6 @@ import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.bundling.ZipEntryCompression
Expand Down Expand Up @@ -94,8 +94,7 @@ public abstract class ShadowJar :
public open val sourceSetsClassesDirs: ConfigurableFileCollection = objectFactory.fileCollection {
minimizeJar.map {
if (it) {
project.extensions.getByType(SourceSetContainer::class.java)
.map { sourceSet -> sourceSet.output.classesDirs.filter(File::isDirectory) }
project.sourceSets.map { sourceSet -> sourceSet.output.classesDirs.filter(File::isDirectory) }
} else {
emptySet()
}
Expand Down

0 comments on commit 79024b7

Please sign in to comment.