Skip to content

Commit

Permalink
Add extensions for project TaskContainer
Browse files Browse the repository at this point in the history
  • Loading branch information
Goooler committed Jan 29, 2025
1 parent 79024b7 commit c71ecaf
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 17 deletions.
4 changes: 3 additions & 1 deletion api/shadow.api
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ public abstract class com/github/jengelman/gradle/plugins/shadow/ShadowApplicati
protected fun configureDistSpec ()V
protected fun configureInstallTask ()V
protected fun configureJarMainClass ()V
protected final fun getShadowJar ()Lorg/gradle/api/tasks/TaskProvider;
}

public final class com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin$Companion {
public final fun getInstallShadowDist (Lorg/gradle/api/tasks/TaskContainer;)Lorg/gradle/api/tasks/TaskProvider;
public final fun getStartShadowScripts (Lorg/gradle/api/tasks/TaskContainer;)Lorg/gradle/api/tasks/TaskProvider;
}

public abstract class com/github/jengelman/gradle/plugins/shadow/ShadowBasePlugin : org/gradle/api/Plugin {
Expand Down Expand Up @@ -48,6 +49,7 @@ public abstract class com/github/jengelman/gradle/plugins/shadow/ShadowJavaPlugi
}

public final class com/github/jengelman/gradle/plugins/shadow/ShadowJavaPlugin$Companion {
public final fun getShadowJar (Lorg/gradle/api/tasks/TaskContainer;)Lorg/gradle/api/tasks/TaskProvider;
}

public abstract class com/github/jengelman/gradle/plugins/shadow/ShadowPlugin : org/gradle/api/Plugin {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.github.jengelman.gradle.plugins.shadow

import com.github.jengelman.gradle.plugins.shadow.ShadowJavaPlugin.Companion.shadowJar
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
Expand All @@ -14,6 +14,7 @@ import org.gradle.api.plugins.JavaApplication
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.JavaExec
import org.gradle.api.tasks.Sync
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.application.CreateStartScripts
import org.gradle.jvm.application.scripts.TemplateBasedScriptGenerator
Expand All @@ -40,7 +41,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {

protected open fun configureJarMainClass() {
val classNameProvider = javaApplication.mainClass
shadowJar.configure { task ->
project.tasks.shadowJar.configure { task ->
task.inputs.property("mainClassName", classNameProvider)
task.doFirst {
// Inject the Main-Class attribute if it is not already present.
Expand All @@ -55,9 +56,9 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
project.tasks.register(SHADOW_RUN_TASK_NAME, JavaExec::class.java) { task ->
task.description = "Runs this project as a JVM application using the shadow jar"
task.group = ApplicationPlugin.APPLICATION_GROUP
task.dependsOn(installShadowDist)
task.dependsOn(project.tasks.installShadowDist)

val jarFile = installShadowDist.zip(shadowJar) { i, s ->
val jarFile = project.tasks.installShadowDist.zip(project.tasks.shadowJar) { i, s ->
i.destinationDir.resolve("lib/${s.archiveFile.get().asFile.name}")
}
task.classpath(jarFile)
Expand All @@ -84,7 +85,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
(task.windowsStartScriptGenerator as TemplateBasedScriptGenerator).template =
project.resources.text.fromString(windowsStartScript)

task.classpath = project.files(shadowJar)
task.classpath = project.files(project.tasks.shadowJar)
task.mainModule.set(javaApplication.mainModule)
task.mainClass.set(javaApplication.mainClass)
task.conventionMapping.map("applicationName", javaApplication::getApplicationName)
Expand All @@ -96,7 +97,7 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
}

protected open fun configureInstallTask() {
installShadowDist.configure { task ->
project.tasks.installShadowDist.configure { task ->
val applicationName = project.providers.provider { javaApplication.applicationName }

task.doFirst {
Expand Down Expand Up @@ -129,26 +130,26 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
distributions.contents { contents ->
contents.from(project.file("src/dist"))
contents.into("lib") { lib ->
lib.from(shadowJar)
lib.from(project.tasks.shadowJar)
lib.from(project.configurations.named(ShadowBasePlugin.CONFIGURATION_NAME))
}
contents.into("bin") { bin ->
bin.from(project.tasks.named(SHADOW_SCRIPTS_TASK_NAME))
bin.from(project.tasks.startShadowScripts)
bin.filePermissions { it.unix(493) }
}
}
}
}

protected val shadowJar: TaskProvider<ShadowJar>
get() = project.tasks.named(ShadowJavaPlugin.SHADOW_JAR_TASK_NAME, ShadowJar::class.java)

private val installShadowDist: TaskProvider<Sync>
get() = project.tasks.named(SHADOW_INSTALL_TASK_NAME, Sync::class.java)

public companion object {
public const val SHADOW_RUN_TASK_NAME: String = "runShadow"
public const val SHADOW_SCRIPTS_TASK_NAME: String = "startShadowScripts"
public const val SHADOW_INSTALL_TASK_NAME: String = "installShadowDist"

public inline val TaskContainer.startShadowScripts: TaskProvider<CreateStartScripts>
get() = named(SHADOW_SCRIPTS_TASK_NAME, CreateStartScripts::class.java)

public inline val TaskContainer.installShadowDist: TaskProvider<Sync>
get() = named(SHADOW_INSTALL_TASK_NAME, Sync::class.java)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.github.jengelman.gradle.plugins.shadow

import com.github.jengelman.gradle.plugins.shadow.internal.jar
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
Expand All @@ -16,8 +17,8 @@ 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.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.gradle.plugin.devel.plugins.JavaGradlePluginPlugin

public abstract class ShadowJavaPlugin @Inject constructor(
Expand Down Expand Up @@ -80,7 +81,7 @@ public abstract class ShadowJavaPlugin @Inject constructor(
}

private fun configureShadowTask(project: Project, shadowConfiguration: Configuration): TaskProvider<ShadowJar> {
val jarTask = project.tasks.named(JavaPlugin.JAR_TASK_NAME, Jar::class.java)
val jarTask = project.tasks.jar
val taskProvider = project.tasks.register(SHADOW_JAR_TASK_NAME, ShadowJar::class.java) { shadow ->
shadow.group = ShadowBasePlugin.GROUP_NAME
shadow.description = "Create a combined JAR of project and runtime dependencies"
Expand Down Expand Up @@ -114,5 +115,8 @@ public abstract class ShadowJavaPlugin @Inject constructor(
public companion object {
public const val SHADOW_JAR_TASK_NAME: String = "shadowJar"
public const val SHADOW_RUNTIME_ELEMENTS_CONFIGURATION_NAME: String = "shadowRuntimeElements"

public inline val TaskContainer.shadowJar: TaskProvider<ShadowJar>
get() = named(SHADOW_JAR_TASK_NAME, ShadowJar::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ 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.api.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.jvm.tasks.Jar
import org.gradle.jvm.toolchain.JavaToolchainService
import org.gradle.util.GradleVersion

Expand Down Expand Up @@ -41,6 +44,9 @@ internal inline val Project.javaPluginExtension: JavaPluginExtension
internal inline val Project.javaToolchainService: JavaToolchainService
get() = extensions.getByType(JavaToolchainService::class.java)

internal inline val TaskContainer.jar: TaskProvider<Jar>
get() = named("jar", Jar::class.java)

internal inline fun <reified V : Any> ObjectFactory.property(
defaultValue: Any? = null,
): Property<V> = property(V::class.java).apply {
Expand Down

0 comments on commit c71ecaf

Please sign in to comment.