Optimize embeddable JARs
Exclude the compiler dummy JAR from the resulting shadow JAR
This commit is contained in:
@@ -1,10 +1,8 @@
|
|||||||
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
@file:Suppress("unused") // usages in build scripts are not tracked properly
|
||||||
|
|
||||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||||
import org.gradle.api.GradleException
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.file.DuplicatesStrategy
|
import org.gradle.api.file.DuplicatesStrategy
|
||||||
import org.gradle.api.tasks.bundling.Zip
|
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
import org.gradle.kotlin.dsl.task
|
import org.gradle.kotlin.dsl.task
|
||||||
import org.gradle.kotlin.dsl.*
|
import org.gradle.kotlin.dsl.*
|
||||||
@@ -104,23 +102,22 @@ fun Project.embeddableCompilerDummyForDependenciesRewriting(taskName: String = "
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Zip, body: Jar.() -> Unit = {}): Jar {
|
fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Jar, body: Jar.() -> Unit = {}): Jar {
|
||||||
val originalFiles by lazy {
|
originalJarTask.apply {
|
||||||
val jarContents = zipTree(originalJarTask.outputs.files.singleFile).files
|
classifier = "original"
|
||||||
val basePath = jarContents.find { it.name == "MANIFEST.MF" }?.parentFile?.parentFile ?: throw GradleException("cannot determine the jar root dir")
|
|
||||||
jarContents.map { it.relativeTo(basePath).path }.toSet()
|
|
||||||
}
|
}
|
||||||
return task<Jar>("rewrittenDepsJar") {
|
|
||||||
originalJarTask.apply {
|
val compilerDummyJarFile by lazy { configurations.getAt("compilerDummyJar").singleFile }
|
||||||
classifier = "original"
|
|
||||||
}
|
return shadowJarTask.apply {
|
||||||
shadowJarTask.apply {
|
dependsOn(originalJarTask)
|
||||||
dependsOn(originalJarTask)
|
from(originalJarTask)// { include("**") }
|
||||||
from(originalJarTask)// { include("**") }
|
|
||||||
classifier = "shadow"
|
// When Gradle traverses the inputs, reject the shaded compiler JAR,
|
||||||
}
|
// which leads to the content of that JAR being excluded as well:
|
||||||
dependsOn(shadowJarTask)
|
exclude { it.file == compilerDummyJarFile }
|
||||||
from(project.zipTree(shadowJarTask.outputs.files.singleFile)) { include { originalFiles.any { originalFile -> it.file.canonicalPath.endsWith(originalFile) } } }
|
|
||||||
|
classifier = null
|
||||||
body()
|
body()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user