From 4222b6c2213cb9e8389a38b00680f576e423fa7d Mon Sep 17 00:00:00 2001 From: Goooler Date: Sun, 22 Sep 2024 15:59:58 +0800 Subject: [PATCH] Cleanups --- .../shadow/{internal => }/DependencyFilter.kt | 16 ++-- .../plugins/shadow/ShadowApplicationPlugin.kt | 14 ++-- .../shadow/{internal => }/ZipCompressor.kt | 2 +- .../internal/AbstractDependencyFilter.kt | 22 +++-- .../shadow/internal/DefaultInheritManifest.kt | 36 +++++++++ .../shadow/internal/DefaultZipCompressor.kt | 1 + .../{impl => internal}/RelocatorRemapper.kt | 5 +- .../shadow/{tasks => internal}/ShadowSpec.kt | 6 +- .../plugins/shadow/internal/UnusedTracker.kt | 4 +- .../gradle/plugins/shadow/internal/Utils.kt | 20 +++-- .../shadow/relocation/SimpleRelocator.kt | 6 +- .../shadow/tasks/DefaultInheritManifest.kt | 81 ------------------- .../plugins/shadow/tasks/InheritManifest.kt | 1 - .../gradle/plugins/shadow/tasks/KnowsTask.kt | 7 +- .../plugins/shadow/tasks/ShadowCopyAction.kt | 16 ++-- .../gradle/plugins/shadow/tasks/ShadowJar.kt | 78 +++++++----------- .../Log4j2PluginsCacheFileTransformer.kt | 3 +- .../ManifestAppenderTransformer.kt | 3 +- .../ManifestResourceTransformer.kt | 3 +- .../shadow/transformers/TransformerContext.kt | 2 - 20 files changed, 129 insertions(+), 197 deletions(-) rename src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/{internal => }/DependencyFilter.kt (70%) rename src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/{internal => }/ZipCompressor.kt (69%) create mode 100644 src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultInheritManifest.kt rename src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/{impl => internal}/RelocatorRemapper.kt (95%) rename src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/{tasks => internal}/ShadowSpec.kt (91%) delete mode 100644 src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/DefaultInheritManifest.kt diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DependencyFilter.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/DependencyFilter.kt similarity index 70% rename from src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DependencyFilter.kt rename to src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/DependencyFilter.kt index b041ff4a..43355480 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DependencyFilter.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/DependencyFilter.kt @@ -1,4 +1,4 @@ -package com.github.jengelman.gradle.plugins.shadow.internal +package com.github.jengelman.gradle.plugins.shadow import groovy.lang.Closure import org.gradle.api.artifacts.Dependency @@ -20,35 +20,35 @@ interface DependencyFilter { /** * Exclude dependencies that match the provided spec. */ - fun exclude(spec: Spec): DependencyFilter + fun exclude(spec: Spec): DependencyFilter /** * Include dependencies that match the provided spec. */ - fun include(spec: Spec): DependencyFilter + fun include(spec: Spec): DependencyFilter /** * Create a spec that matches the provided project notation on group, name, and version */ - fun project(notation: Map): Spec + fun project(notation: Map): Spec /** * Create a spec that matches the default configuration for the provided project path on group, name, and version */ - fun project(notation: String): Spec + fun project(notation: String): Spec /** * Create a spec that matches dependencies using the provided notation on group, name, and version */ - fun dependency(notation: Any): Spec + fun dependency(notation: Any): Spec /** * Create a spec that matches the provided dependency on group, name, and version */ - fun dependency(dependency: Dependency): Spec + fun dependency(dependency: Dependency): Spec /** * Create a spec that matches the provided closure */ - fun dependency(spec: Closure<*>): Spec + fun dependency(spec: Closure<*>): Spec } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt index 8579627e..3c537ccb 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.kt @@ -1,7 +1,7 @@ package com.github.jengelman.gradle.plugins.shadow import com.github.jengelman.gradle.plugins.shadow.internal.JavaJarExec -import com.github.jengelman.gradle.plugins.shadow.internal.Utils +import com.github.jengelman.gradle.plugins.shadow.internal.requireResourceAsText import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import java.io.File import org.gradle.api.GradleException @@ -74,9 +74,9 @@ class ShadowApplicationPlugin : Plugin { private fun addCreateScriptsTask(project: Project) { project.tasks.register(SHADOW_SCRIPTS_TASK_NAME, CreateStartScripts::class.java) { startScripts -> (startScripts.unixStartScriptGenerator as DefaultTemplateBasedStartScriptGenerator).template = - project.resources.text.fromString(Utils.requireResourceAsText("internal/unixStartScript.txt")) + project.resources.text.fromString(requireResourceAsText("internal/unixStartScript.txt")) (startScripts.windowsStartScriptGenerator as DefaultTemplateBasedStartScriptGenerator).template = - project.resources.text.fromString(Utils.requireResourceAsText("internal/windowsStartScript.txt")) + project.resources.text.fromString(requireResourceAsText("internal/windowsStartScript.txt")) startScripts.description = "Creates OS specific scripts to run the project as a JVM application using the shadow jar" startScripts.group = ApplicationPlugin.APPLICATION_GROUP @@ -107,9 +107,11 @@ class ShadowApplicationPlugin : Plugin { } } task.doLast { - task.eachFile { - if (it.path == "bin/${javaApplication.applicationName}") { - it.mode = 0x755 + task.eachFile { file -> + if (file.path == "bin/${javaApplication.applicationName}") { + file.permissions { + it.unix(0x755) + } } } } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ZipCompressor.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ZipCompressor.kt similarity index 69% rename from src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ZipCompressor.kt rename to src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ZipCompressor.kt index ec613153..ea5bf15d 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ZipCompressor.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/ZipCompressor.kt @@ -1,4 +1,4 @@ -package com.github.jengelman.gradle.plugins.shadow.internal +package com.github.jengelman.gradle.plugins.shadow import org.gradle.api.internal.file.archive.compression.ArchiveOutputStreamFactory diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/AbstractDependencyFilter.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/AbstractDependencyFilter.kt index 1ebc1f7c..d43cbac6 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/AbstractDependencyFilter.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/AbstractDependencyFilter.kt @@ -1,5 +1,6 @@ package com.github.jengelman.gradle.plugins.shadow.internal +import com.github.jengelman.gradle.plugins.shadow.DependencyFilter import groovy.lang.Closure import org.gradle.api.Project import org.gradle.api.artifacts.Configuration @@ -11,9 +12,8 @@ import org.gradle.api.specs.Spec import org.gradle.api.specs.Specs internal abstract class AbstractDependencyFilter(protected val project: Project) : DependencyFilter { - - protected val includeSpecs: MutableList> = mutableListOf() - protected val excludeSpecs: MutableList> = mutableListOf() + private val includeSpecs = mutableListOf>() + private val excludeSpecs = mutableListOf>() protected abstract fun resolve( dependencies: Set, @@ -38,29 +38,27 @@ internal abstract class AbstractDependencyFilter(protected val project: Project) ?: project.files() } - override fun exclude(spec: Spec): DependencyFilter { + override fun exclude(spec: Spec): DependencyFilter = apply { excludeSpecs.add(spec) - return this } - override fun include(spec: Spec): DependencyFilter { + override fun include(spec: Spec): DependencyFilter = apply { includeSpecs.add(spec) - return this } - override fun project(notation: Map): Spec { + override fun project(notation: Map): Spec { return dependency(project.dependencies.project(notation)) } - override fun project(notation: String): Spec { + override fun project(notation: String): Spec { return dependency(project.dependencies.project(mapOf("path" to notation, "configuration" to "default"))) } - override fun dependency(notation: Any): Spec { + override fun dependency(notation: Any): Spec { return dependency(project.dependencies.create(notation)) } - override fun dependency(dependency: Dependency): Spec { + override fun dependency(dependency: Dependency): Spec { return dependency { it: ResolvedDependency -> (dependency.group == null || it.moduleGroup.matches(dependency.group!!.toRegex())) && (it.moduleName.matches(dependency.name.toRegex())) && @@ -68,7 +66,7 @@ internal abstract class AbstractDependencyFilter(protected val project: Project) } } - override fun dependency(spec: Closure<*>): Spec { + override fun dependency(spec: Closure<*>): Spec { return Specs.convertClosureToSpec(spec) } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultInheritManifest.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultInheritManifest.kt new file mode 100644 index 00000000..009720c0 --- /dev/null +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultInheritManifest.kt @@ -0,0 +1,36 @@ +package com.github.jengelman.gradle.plugins.shadow.internal + +import com.github.jengelman.gradle.plugins.shadow.tasks.InheritManifest +import org.gradle.api.Action +import org.gradle.api.internal.file.FileResolver +import org.gradle.api.java.archives.Manifest +import org.gradle.api.java.archives.internal.DefaultManifest +import org.gradle.api.java.archives.internal.DefaultManifestMergeSpec + +internal class DefaultInheritManifest( + private val fileResolver: FileResolver, + private val internalManifest: Manifest = DefaultManifest(fileResolver), +) : InheritManifest, + Manifest by internalManifest { + private val inheritMergeSpecs: MutableList = ArrayList() + + override fun inheritFrom(vararg inheritPaths: Any): InheritManifest = apply { + inheritFrom(inheritPaths, action = null) + } + + override fun inheritFrom(vararg inheritPaths: Any, action: Action?): InheritManifest = apply { + val mergeSpec = DefaultManifestMergeSpec() + mergeSpec.from(inheritPaths) + inheritMergeSpecs.add(mergeSpec) + action?.execute(this) + } + + override fun getEffectiveManifest(): DefaultManifest { + var base = DefaultManifest(fileResolver) + inheritMergeSpecs.forEach { + base = it.merge(base, fileResolver) + } + base.from(internalManifest) + return base.effectiveManifest + } +} diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultZipCompressor.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultZipCompressor.kt index af21b625..a8f52c06 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultZipCompressor.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/DefaultZipCompressor.kt @@ -1,5 +1,6 @@ package com.github.jengelman.gradle.plugins.shadow.internal +import com.github.jengelman.gradle.plugins.shadow.ZipCompressor import java.io.File import org.apache.tools.zip.Zip64Mode import org.apache.tools.zip.ZipOutputStream diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/impl/RelocatorRemapper.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt similarity index 95% rename from src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/impl/RelocatorRemapper.kt rename to src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt index 6e15498c..17747b56 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/impl/RelocatorRemapper.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/RelocatorRemapper.kt @@ -1,5 +1,4 @@ - -package com.github.jengelman.gradle.plugins.shadow.impl +package com.github.jengelman.gradle.plugins.shadow.internal import com.github.jengelman.gradle.plugins.shadow.ShadowStats import com.github.jengelman.gradle.plugins.shadow.relocation.RelocateClassContext @@ -14,7 +13,7 @@ import org.objectweb.asm.commons.Remapper * * @author John Engelman */ -class RelocatorRemapper( +internal class RelocatorRemapper( internal val relocators: List, internal val stats: ShadowStats, ) : Remapper() { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ShadowSpec.kt similarity index 91% rename from src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec.kt rename to src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ShadowSpec.kt index ab2276cf..817959f1 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowSpec.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/ShadowSpec.kt @@ -1,7 +1,7 @@ -package com.github.jengelman.gradle.plugins.shadow.tasks +package com.github.jengelman.gradle.plugins.shadow.internal +import com.github.jengelman.gradle.plugins.shadow.DependencyFilter import com.github.jengelman.gradle.plugins.shadow.ShadowStats -import com.github.jengelman.gradle.plugins.shadow.internal.DependencyFilter import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator import com.github.jengelman.gradle.plugins.shadow.relocation.SimpleRelocator import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer @@ -57,7 +57,7 @@ internal interface ShadowSpec : CopySpec { NoSuchMethodException::class, InvocationTargetException::class, ) - fun relocate(clazz: Class): ShadowSpec + fun relocate(clazz: Class): ShadowSpec @Throws( InstantiationException::class, diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.kt index d487a581..91bd6163 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.kt @@ -12,7 +12,7 @@ import org.vafer.jdependency.Clazzpath import org.vafer.jdependency.ClazzpathUnit /** Tracks unused classes in the project classpath. */ -class UnusedTracker private constructor( +internal class UnusedTracker private constructor( classDirs: Iterable, classJars: FileCollection, @InputFiles val toMinimize: FileCollection, @@ -40,7 +40,6 @@ class UnusedTracker private constructor( } companion object { - @JvmStatic fun forProject( apiJars: FileCollection, sourceSetsClassesDirs: Iterable, @@ -49,7 +48,6 @@ class UnusedTracker private constructor( return UnusedTracker(sourceSetsClassesDirs, apiJars, toMinimize) } - @JvmStatic fun getApiJarsFromProject(project: Project): FileCollection { val apiDependencies = project.configurations.findByName("api")?.dependencies ?: return project.files() diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Utils.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Utils.kt index 8470c68d..049a8c7e 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Utils.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/internal/Utils.kt @@ -2,13 +2,21 @@ package com.github.jengelman.gradle.plugins.shadow.internal import java.io.InputStream -internal object Utils { +internal fun requireResourceAsText(name: String): String { + return requireResourceAsStream(name).bufferedReader().readText() +} - fun requireResourceAsText(name: String): String { - return requireResourceAsStream(name).bufferedReader().readText() +internal inline fun runOrThrow( + error: (e: Exception) -> Nothing = { throw RuntimeException(it) }, + block: () -> R, +): R { + return try { + block() + } catch (e: Exception) { + error(e) } +} - private fun requireResourceAsStream(name: String): InputStream { - return this::class.java.getResourceAsStream(name) ?: error("Resource $name not found.") - } +private fun requireResourceAsStream(name: String): InputStream { + return Unit::class.java.getResourceAsStream(name) ?: error("Resource $name not found.") } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocator.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocator.kt index d35df14c..d2103cf7 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocator.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/relocation/SimpleRelocator.kt @@ -61,14 +61,12 @@ class SimpleRelocator @JvmOverloads constructor( this.excludes += normalizePatterns(excludes) } - fun include(pattern: String): SimpleRelocator { + fun include(pattern: String): SimpleRelocator = apply { includes.addAll(normalizePatterns(listOf(pattern))) - return this } - fun exclude(pattern: String): SimpleRelocator { + fun exclude(pattern: String): SimpleRelocator = apply { excludes.addAll(normalizePatterns(listOf(pattern))) - return this } override fun canRelocatePath(path: String): Boolean { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/DefaultInheritManifest.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/DefaultInheritManifest.kt deleted file mode 100644 index b97b6b2e..00000000 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/DefaultInheritManifest.kt +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.jengelman.gradle.plugins.shadow.tasks - -import groovy.lang.Closure -import java.io.Writer -import org.gradle.api.Action -import org.gradle.api.internal.file.FileResolver -import org.gradle.api.java.archives.Attributes -import org.gradle.api.java.archives.Manifest -import org.gradle.api.java.archives.ManifestException -import org.gradle.api.java.archives.ManifestMergeSpec -import org.gradle.api.java.archives.internal.DefaultManifest -import org.gradle.api.java.archives.internal.DefaultManifestMergeSpec - -class DefaultInheritManifest( - private val fileResolver: FileResolver, -) : InheritManifest { - private val inheritMergeSpecs: MutableList = ArrayList() - private val internalManifest: Manifest = DefaultManifest(fileResolver) - - override fun inheritFrom(vararg inheritPaths: Any): InheritManifest { - inheritFrom(inheritPaths, action = null) - return this - } - - override fun inheritFrom(vararg inheritPaths: Any, action: Action?): InheritManifest { - val mergeSpec = DefaultManifestMergeSpec() - mergeSpec.from(inheritPaths) - inheritMergeSpecs.add(mergeSpec) - action?.execute(this) - return this - } - - override fun getAttributes(): Attributes { - return internalManifest.attributes - } - - override fun getSections(): Map { - return internalManifest.sections - } - - @Throws(ManifestException::class) - override fun attributes(attributes: Map): Manifest { - internalManifest.attributes(attributes) - return this - } - - @Throws(ManifestException::class) - override fun attributes(attributes: Map, sectionName: String): Manifest { - internalManifest.attributes(attributes, sectionName) - return this - } - - override fun getEffectiveManifest(): DefaultManifest { - var base = DefaultManifest(fileResolver) - inheritMergeSpecs.forEach { - base = it.merge(base, fileResolver) - } - base.from(internalManifest) - return base.effectiveManifest - } - - fun writeTo(writer: Writer): Manifest = apply { - this.effectiveManifest.writeTo(writer) - } - - override fun writeTo(path: Any): Manifest = apply { - this.effectiveManifest.writeTo(path) - } - - override fun from(vararg mergePath: Any): Manifest = apply { - internalManifest.from(*mergePath) - } - - override fun from(mergePath: Any, closure: Closure<*>?): Manifest = apply { - internalManifest.from(mergePath, closure) - } - - override fun from(mergePath: Any, action: Action): Manifest = apply { - internalManifest.from(mergePath, action) - } -} diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/InheritManifest.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/InheritManifest.kt index c0543e0f..9e6b846b 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/InheritManifest.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/InheritManifest.kt @@ -5,6 +5,5 @@ import org.gradle.api.java.archives.Manifest interface InheritManifest : Manifest { fun inheritFrom(vararg inheritPaths: Any): InheritManifest - fun inheritFrom(vararg inheritPaths: Any, action: Action?): InheritManifest } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/KnowsTask.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/KnowsTask.kt index da984511..bcba0593 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/KnowsTask.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/KnowsTask.kt @@ -1,15 +1,14 @@ package com.github.jengelman.gradle.plugins.shadow.tasks +import com.github.jengelman.gradle.plugins.shadow.internal.requireResourceAsText import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction class KnowsTask : DefaultTask() { @TaskAction fun knows() { - println("\nNo, The Shadow Knows....") - this::class.java.getResourceAsStream("/shadowBanner.txt")?.let { - println(it.bufferedReader().readText()) - } + logger.info("No, The Shadow Knows....") + logger.info(requireResourceAsText("/shadowBanner.txt")) } companion object { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt index 27677d79..b9fb17c5 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.kt @@ -1,9 +1,9 @@ package com.github.jengelman.gradle.plugins.shadow.tasks import com.github.jengelman.gradle.plugins.shadow.ShadowStats -import com.github.jengelman.gradle.plugins.shadow.impl.RelocatorRemapper +import com.github.jengelman.gradle.plugins.shadow.ZipCompressor +import com.github.jengelman.gradle.plugins.shadow.internal.RelocatorRemapper import com.github.jengelman.gradle.plugins.shadow.internal.UnusedTracker -import com.github.jengelman.gradle.plugins.shadow.internal.ZipCompressor import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext @@ -12,7 +12,9 @@ import java.io.InputStream import java.io.OutputStream import java.util.GregorianCalendar import java.util.zip.ZipException -import org.apache.commons.io.FilenameUtils +import kotlin.io.path.Path +import kotlin.io.path.extension +import kotlin.io.path.nameWithoutExtension import org.apache.log4j.LogManager import org.apache.tools.zip.UnixStat import org.apache.tools.zip.Zip64RequiredException @@ -40,7 +42,7 @@ import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassWriter import org.objectweb.asm.commons.ClassRemapper -class ShadowCopyAction( +class ShadowCopyAction internal constructor( private val zipFile: File, private val compressor: ZipCompressor, private val documentationRegistry: DocumentationRegistry, @@ -123,7 +125,7 @@ class ShadowCopyAction( } protected fun isClass(fileDetails: FileCopyDetails): Boolean { - return FilenameUtils.getExtension(fileDetails.path) == "class" + return Path(fileDetails.path).extension == "class" } override fun processFile(details: FileCopyDetailsInternal) { @@ -238,7 +240,7 @@ class ShadowCopyAction( } private fun isUnused(classPath: String): Boolean { - val className = FilenameUtils.removeExtension(classPath) + val className = Path(classPath).nameWithoutExtension .replace('/', '.') val result = unused.contains(className) if (result) { @@ -256,7 +258,7 @@ class ShadowCopyAction( } private fun remapClass(fileCopyDetails: FileCopyDetails) { - if (FilenameUtils.getExtension(fileCopyDetails.name) == "class") { + if (Path(fileCopyDetails.name).extension == "class") { fileCopyDetails.file.inputStream().use { inputStream -> remapClass( inputStream, diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt index 26cb1511..fd39e510 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.kt @@ -1,13 +1,16 @@ package com.github.jengelman.gradle.plugins.shadow.tasks +import com.github.jengelman.gradle.plugins.shadow.DependencyFilter import com.github.jengelman.gradle.plugins.shadow.ShadowStats +import com.github.jengelman.gradle.plugins.shadow.ZipCompressor import com.github.jengelman.gradle.plugins.shadow.internal.DefaultDependencyFilter +import com.github.jengelman.gradle.plugins.shadow.internal.DefaultInheritManifest import com.github.jengelman.gradle.plugins.shadow.internal.DefaultZipCompressor -import com.github.jengelman.gradle.plugins.shadow.internal.DependencyFilter import com.github.jengelman.gradle.plugins.shadow.internal.MinimizeDependencyFilter +import com.github.jengelman.gradle.plugins.shadow.internal.ShadowSpec import com.github.jengelman.gradle.plugins.shadow.internal.UnusedTracker import com.github.jengelman.gradle.plugins.shadow.internal.UnusedTracker.Companion.getApiJarsFromProject -import com.github.jengelman.gradle.plugins.shadow.internal.ZipCompressor +import com.github.jengelman.gradle.plugins.shadow.internal.runOrThrow 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 @@ -46,7 +49,6 @@ import org.jetbrains.annotations.NotNull class ShadowJar : Jar(), ShadowSpec { - private val _transformers = mutableListOf() private val _relocators = mutableListOf() private val _configurations = mutableListOf() @@ -167,15 +169,13 @@ class ShadowJar : return (mainSpec.buildRootResolver() as DefaultCopySpec.DefaultCopySpecResolver).patternSet } - override fun minimize(): ShadowJar { + override fun minimize(): ShadowJar = apply { minimizeJar = true - return this } - override fun minimize(action: Action?): ShadowJar { + override fun minimize(action: Action?): ShadowJar = apply { minimize() action?.execute(dependencyFilterForMinimize) - return this } override fun getManifest(): InheritManifest { @@ -215,89 +215,67 @@ class ShadowJar : logger.info(stats.toString()) } - override fun dependencies(action: Action?): ShadowJar { + override fun dependencies(action: Action?): ShadowJar = apply { action?.execute(dependencyFilter) - return this } override fun transform(clazz: Class): ShadowJar { return transform(clazz, null) } - override fun transform(clazz: Class, action: Action?): ShadowJar { + override fun transform(clazz: Class, action: Action?): ShadowJar = apply { val transformer = clazz.getDeclaredConstructor().newInstance() addTransform(transformer, action) - return this } - override fun transform(transformer: Transformer): ShadowJar { + override fun transform(transformer: Transformer): ShadowJar = apply { addTransform(transformer, null) - return this } - override fun mergeServiceFiles(): ShadowJar { - return try { - transform(ServiceFileTransformer::class.java) - } catch (e: Exception) { - throw RuntimeException(e) - } + override fun mergeServiceFiles(): ShadowJar = runOrThrow { + transform(ServiceFileTransformer::class.java) } - override fun mergeServiceFiles(rootPath: String): ShadowJar { - return try { - transform(ServiceFileTransformer::class.java) { it.setPath(rootPath) } - } catch (e: Exception) { - throw RuntimeException(e) - } + override fun mergeServiceFiles(rootPath: String): ShadowJar = runOrThrow { + transform(ServiceFileTransformer::class.java) { it.setPath(rootPath) } } - override fun mergeServiceFiles(action: Action?): ShadowJar { - return try { - transform(ServiceFileTransformer::class.java, action) - } catch (e: Exception) { - throw RuntimeException(e) - } + override fun mergeServiceFiles(action: Action?): ShadowJar = runOrThrow { + transform(ServiceFileTransformer::class.java, action) } - override fun mergeGroovyExtensionModules(): ShadowJar { - return try { - transform(GroovyExtensionModuleTransformer::class.java) - } catch (e: Exception) { - throw RuntimeException(e) - } + override fun mergeGroovyExtensionModules(): ShadowJar = runOrThrow { + transform(GroovyExtensionModuleTransformer::class.java) } - override fun append(resourcePath: String): ShadowJar { - return try { - transform(AppendingTransformer::class.java) { it.resource = resourcePath } - } catch (e: Exception) { - throw RuntimeException(e) - } + override fun append(resourcePath: String): ShadowJar = runOrThrow { + transform(AppendingTransformer::class.java) { it.resource = resourcePath } } override fun relocate(pattern: String, destination: String): ShadowJar { return relocate(pattern, destination, null) } - override fun relocate(pattern: String, destination: String, action: Action?): ShadowJar { + override fun relocate( + pattern: String, + destination: String, + action: Action?, + ): ShadowJar = apply { val relocator = SimpleRelocator(pattern, destination, mutableListOf(), mutableListOf()) addRelocator(relocator, action) - return this } - override fun relocate(relocator: Relocator): ShadowJar { + override fun relocate(relocator: Relocator): ShadowJar = apply { addRelocator(relocator, null) - return this } - override fun relocate(clazz: Class): ShadowJar { + override fun relocate(clazz: Class): ShadowJar { return relocate(clazz, null) } - override fun relocate(clazz: Class, action: Action?): ShadowJar { + override fun relocate(clazz: Class, action: Action?): ShadowJar = apply { val relocator = clazz.getDeclaredConstructor().newInstance() addRelocator(relocator, action) - return this } private fun isCacheableTransform(clazz: Class): Boolean { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/Log4j2PluginsCacheFileTransformer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/Log4j2PluginsCacheFileTransformer.kt index 77797c44..332d6c14 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/Log4j2PluginsCacheFileTransformer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/Log4j2PluginsCacheFileTransformer.kt @@ -10,7 +10,6 @@ import java.io.FileOutputStream import java.net.URL import java.util.Collections import java.util.Enumeration -import org.apache.commons.io.IOUtils import org.apache.commons.io.output.CloseShieldOutputStream import org.apache.logging.log4j.core.config.plugins.processor.PluginCache import org.apache.tools.zip.ZipEntry @@ -34,7 +33,7 @@ class Log4j2PluginsCacheFileTransformer : Transformer { temporaryFile.deleteOnExit() temporaryFiles.add(temporaryFile) FileOutputStream(temporaryFile).use { fos -> - IOUtils.copy(inputStream, fos) + inputStream.copyTo(fos) } relocators.addAll(context.relocators) if (stats == null) { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestAppenderTransformer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestAppenderTransformer.kt index 6e38bc4d..6be8e7f0 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestAppenderTransformer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestAppenderTransformer.kt @@ -21,9 +21,8 @@ class ManifestAppenderTransformer : Transformer { @Input val attributes: List>> = _attributes - fun append(name: String, value: Comparable<*>): ManifestAppenderTransformer { + fun append(name: String, value: Comparable<*>): ManifestAppenderTransformer = apply { _attributes.add(name to value) - return this } override fun canTransformResource(element: FileTreeElement): Boolean { diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestResourceTransformer.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestResourceTransformer.kt index e68f7a1b..33eaea4b 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestResourceTransformer.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/ManifestResourceTransformer.kt @@ -68,11 +68,10 @@ class ManifestResourceTransformer : Transformer { manifest!!.write(os) } - fun attributes(attributes: Map): ManifestResourceTransformer { + fun attributes(attributes: Map): ManifestResourceTransformer = apply { if (manifestEntries == null) { manifestEntries = mutableMapOf() } manifestEntries!!.putAll(attributes.mapValues { Attributes().apply { putValue(it.key, it.value.toString()) } }) - return this } } diff --git a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext.kt b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext.kt index 0f9a58fd..bf58d7ea 100644 --- a/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext.kt +++ b/src/main/kotlin/com/github/jengelman/gradle/plugins/shadow/transformers/TransformerContext.kt @@ -33,12 +33,10 @@ data class TransformerContext( } companion object { - @JvmStatic fun getEntryTimestamp(preserveFileTimestamps: Boolean, entryTime: Long): Long { return if (preserveFileTimestamps) entryTime else ShadowCopyAction.CONSTANT_TIME_FOR_ZIP_ENTRIES } - @JvmStatic fun builder() = Builder() } }