Files
kotlin-fork/libraries/scripting/dependencies-maven-all/build.gradle.kts
T
2024-02-09 21:35:03 +00:00

165 lines
5.0 KiB
Kotlin

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.github.jengelman.gradle.plugins.shadow.transformers.ComponentsXmlResourceTransformer
import org.gradle.internal.jvm.Jvm
import org.gradle.kotlin.dsl.support.serviceOf
description = "Shaded Maven dependencies resolver"
val jarBaseName = the<BasePluginExtension>().archivesName
val embedded by configurations
embedded.apply {
exclude("org.slf4j", "slf4j-api")
}
plugins {
kotlin("jvm")
id("jps-compatible")
}
val proguardLibraryJars by configurations.creating {
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR))
}
}
dependencies {
api(project(":kotlin-scripting-dependencies"))
proguardLibraryJars(project(":kotlin-scripting-dependencies"))
embedded(project(":kotlin-scripting-dependencies-maven")) { isTransitive = false }
embedded("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.2")
embedded("org.apache.maven.resolver:maven-resolver-transport-file:1.9.2")
embedded("org.apache.maven.resolver:maven-resolver-transport-wagon:1.9.2")
embedded("org.apache.maven.resolver:maven-resolver-impl:1.9.2")
embedded("org.apache.maven:maven-core:3.8.7")
embedded("org.apache.maven.wagon:wagon-http:3.5.3")
embedded("commons-io:commons-io:2.11.0")
testImplementation(libs.junit4)
testRuntimeOnly("org.slf4j:slf4j-nop:1.7.36")
testImplementation(project(":kotlin-scripting-dependencies-maven-all"))
}
sourceSets {
"main" {}
"test" { projectDefault() }
}
publish()
noDefaultJar()
sourcesJar()
javadocJar()
val mavenPackagesToRelocate = listOf(
"org.eclipse",
"org.codehaus",
"org.jsoup",
"afu",
"org.aopalliance",
"org.checkerframework",
"org.sonatype"
)
val relocatedJar by task<ShadowJar> {
configurations = listOf(embedded)
duplicatesStrategy = DuplicatesStrategy.INCLUDE
destinationDirectory.set(layout.buildDirectory.dir("libs"))
archiveClassifier.set("relocated")
transform(ComponentsXmlResourceTransformer())
if (kotlinBuildProperties.relocation) {
(packagesToRelocate + mavenPackagesToRelocate).forEach {
relocate(it, "$kotlinEmbeddableRootPackage.$it")
}
}
}
val normalizeComponentsXmlEndings by tasks.registering {
dependsOn(relocatedJar)
val outputFile = layout.buildDirectory.file("$name/${ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH}")
val relocatedJarFile = relocatedJar.map { it.singleOutputFile(layout) }
val archiveOperations = serviceOf<ArchiveOperations>()
outputs.file(outputFile)
doFirst {
val componentsXml = archiveOperations.zipTree(relocatedJarFile.get()).matching {
include { it.path == ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH }
}.single().readText()
val processedComponentsXml = componentsXml.replace("\r\n", "\n")
val outputAsFile = outputFile.get().asFile
outputAsFile.parentFile.mkdirs()
outputAsFile.writeText(processedComponentsXml)
}
}
val normalizedJar by task<Jar> {
dependsOn(relocatedJar)
dependsOn(normalizeComponentsXmlEndings)
archiveClassifier.set("normalized")
from {
zipTree(relocatedJar.get().singleOutputFile(layout)).matching {
exclude(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH)
}
}
into(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH.substringBeforeLast("/")) {
from {
normalizeComponentsXmlEndings.map { it.singleOutputFile(layout) }
}
}
}
val proguard by task<CacheableProguardTask> {
dependsOn(normalizedJar)
configuration("dependencies-maven.pro")
injars(mapOf("filter" to "!META-INF/versions/**,!kotlinx/coroutines/debug/**"), normalizedJar.get().outputs.files)
outjars(layout.buildDirectory.file(jarBaseName.map { "libs/$it-$version-after-proguard.jar" }))
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_8))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraryJars)
libraryjars(
files(
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/rt.jar",
"../Classes/classes.jar",
jdkHome = it.metadata.installationPath.asFile
)!!
},
javaLauncher.map {
firstFromJavaHomeThatExists(
"jre/lib/jsse.jar",
"../Classes/jsse.jar",
jdkHome = it.metadata.installationPath.asFile
)!!
},
javaLauncher.map {
Jvm.forHome(it.metadata.installationPath.asFile).toolsJar!!
}
)
)
}
val resultJar by task<Jar> {
val pack = if (kotlinBuildProperties.proguard) proguard else normalizedJar
dependsOn(pack)
setupPublicJar(jarBaseName)
from {
zipTree(pack.map { it.singleOutputFile(layout) })
}
}
setPublishableArtifact(resultJar)