Skip to content

Commit

Permalink
Cleanups
Browse files Browse the repository at this point in the history
  • Loading branch information
Goooler committed Jan 29, 2025
1 parent 3f89708 commit 2fceb20
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 42 deletions.
2 changes: 1 addition & 1 deletion api/shadow.api
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public abstract class com/github/jengelman/gradle/plugins/shadow/ShadowJavaPlugi
protected fun configureComponents (Lorg/gradle/api/Project;)V
protected fun configureConfigurations (Lorg/gradle/api/Project;)V
protected fun configureJavaGradlePlugin (Lorg/gradle/api/Project;)V
protected fun configureShadowTask (Lorg/gradle/api/Project;)Lorg/gradle/api/tasks/TaskProvider;
protected fun configureShadowJar (Lorg/gradle/api/Project;)V
}

public final class com/github/jengelman/gradle/plugins/shadow/ShadowJavaPlugin$Companion {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,15 @@ import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.ApplicationPlugin
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
import org.gradle.jvm.toolchain.JavaToolchainService

public abstract class ShadowApplicationPlugin : Plugin<Project> {
private lateinit var javaApplication: JavaApplication
private lateinit var javaPluginExtension: JavaPluginExtension
private lateinit var javaToolchainService: JavaToolchainService

override fun apply(project: Project) {
this.javaApplication = project.applicationExtension
this.javaPluginExtension = project.javaPluginExtension
this.javaToolchainService = project.javaToolchainService

project.addRunTask()
project.addCreateScriptsTask()
project.configureDistSpec()
Expand All @@ -39,19 +28,20 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
}

protected open fun Project.configureJarMainClass() {
val classNameProvider = javaApplication.mainClass
val mainClassName = applicationExtension.mainClass
tasks.shadowJar.configure { task ->
task.inputs.property("mainClassName", classNameProvider)
task.inputs.property("mainClassName", mainClassName)
task.doFirst {
// Inject the Main-Class attribute if it is not already present.
if (!task.manifest.attributes.contains("Main-Class")) {
task.manifest.attributes["Main-Class"] = classNameProvider.get()
task.manifest.attributes["Main-Class"] = mainClassName.get()
}
}
}
}

protected open fun Project.addRunTask() {
val extension = applicationExtension
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
Expand All @@ -60,8 +50,8 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
i.destinationDir.resolve("lib/${s.archiveFile.get().asFile.name}")
}
task.classpath(jarFile)
task.mainClass.set(javaApplication.mainClass)
task.conventionMapping.map("jvmArgs", javaApplication::getApplicationDefaultJvmArgs)
task.mainClass.set(extension.mainClass)
task.conventionMapping.map("jvmArgs", extension::getApplicationDefaultJvmArgs)
task.javaLauncher.set(javaToolchainService.launcherFor(javaPluginExtension.toolchain))
}
}
Expand All @@ -70,33 +60,31 @@ public abstract class ShadowApplicationPlugin : Plugin<Project> {
* Syncs with [ApplicationPlugin.addCreateScriptsTask](https://github.com/gradle/gradle/blob/bcecbb416f19438c7532e309456e3c3ed287f8f5/platforms/jvm/plugins-application/src/main/java/org/gradle/api/plugins/ApplicationPlugin.java#L184-L203).
*/
protected open fun Project.addCreateScriptsTask() {
val extension = applicationExtension
tasks.register(SHADOW_SCRIPTS_TASK_NAME, CreateStartScripts::class.java) { task ->
task.description = "Creates OS specific scripts to run the project as a JVM application using the shadow jar"
task.group = ApplicationPlugin.APPLICATION_GROUP

val unixStartScript =
requireResourceAsText("com/github/jengelman/gradle/plugins/shadow/internal/unixStartScript.txt")
val windowsStartScript =
requireResourceAsText("com/github/jengelman/gradle/plugins/shadow/internal/windowsStartScript.txt")
val dir = "com/github/jengelman/gradle/plugins/shadow/internal"
(task.unixStartScriptGenerator as TemplateBasedScriptGenerator).template =
resources.text.fromString(unixStartScript)
resources.text.fromString(requireResourceAsText("$dir/unixStartScript.txt"))
(task.windowsStartScriptGenerator as TemplateBasedScriptGenerator).template =
resources.text.fromString(windowsStartScript)
resources.text.fromString(requireResourceAsText("$dir/windowsStartScript.txt"))

task.classpath = files(tasks.shadowJar)
task.mainModule.set(javaApplication.mainModule)
task.mainClass.set(javaApplication.mainClass)
task.conventionMapping.map("applicationName", javaApplication::getApplicationName)
task.mainModule.set(extension.mainModule)
task.mainClass.set(extension.mainClass)
task.conventionMapping.map("applicationName", extension::getApplicationName)
task.conventionMapping.map("outputDir") { layout.buildDirectory.dir("scriptsShadow").get().asFile }
task.conventionMapping.map("executableDir", javaApplication::getExecutableDir)
task.conventionMapping.map("defaultJvmOpts", javaApplication::getApplicationDefaultJvmArgs)
task.conventionMapping.map("executableDir", extension::getExecutableDir)
task.conventionMapping.map("defaultJvmOpts", extension::getApplicationDefaultJvmArgs)
task.modularity.inferModulePath.convention(javaPluginExtension.modularity.inferModulePath)
}
}

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

task.doFirst {
if (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,31 @@ public abstract class ShadowJavaPlugin @Inject constructor(
) : Plugin<Project> {

override fun apply(project: Project) {
project.configureShadowTask()
project.configureShadowJar()
project.configureConfigurations()
project.configureComponents()
project.configureJavaGradlePlugin()
}

protected open fun Project.configureShadowTask(): TaskProvider<ShadowJar> {
protected open fun Project.configureShadowJar() {
val jarTask = tasks.jar
val taskProvider = 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"
shadow.archiveClassifier.set("all")
val taskProvider = tasks.register(SHADOW_JAR_TASK_NAME, ShadowJar::class.java) { task ->
task.group = ShadowBasePlugin.GROUP_NAME
task.description = "Create a combined JAR of project and runtime dependencies"
task.archiveClassifier.set("all")
@Suppress("EagerGradleConfiguration")
shadow.manifest.inheritFrom(jarTask.get().manifest)
task.manifest.inheritFrom(jarTask.get().manifest)
val attrProvider = jarTask.map { it.manifest.attributes["Class-Path"]?.toString().orEmpty() }
val files = files(configurations.shadow)
shadow.doFirst {
task.doFirst {
if (!files.isEmpty) {
val attrs = listOf(attrProvider.getOrElse("")) + files.map { it.name }
shadow.manifest.attributes["Class-Path"] = attrs.joinToString(" ").trim()
task.manifest.attributes["Class-Path"] = attrs.joinToString(" ").trim()
}
}
shadow.from(sourceSets.named("main").map { it.output })
shadow.configurations.convention(listOf(runtimeConfiguration))
shadow.exclude(
task.from(sourceSets.named("main").map { it.output })
task.configurations.convention(listOf(runtimeConfiguration))
task.exclude(
"META-INF/INDEX.LIST",
"META-INF/*.SF",
"META-INF/*.DSA",
Expand All @@ -64,7 +64,6 @@ public abstract class ShadowJavaPlugin @Inject constructor(
)
}
artifacts.add(configurations.shadow.name, taskProvider)
return taskProvider
}

protected open fun Project.configureConfigurations() {
Expand Down

0 comments on commit 2fceb20

Please sign in to comment.