Files
kotlin-fork/libraries/scripting/dependencies-maven-all/build.gradle.kts
T
Alexander.Likhachev a19bd2ed2e [Build] Migrate most of the build logic from Project.buildDir usage
It's going to be deprecated in Gradle 8.3

There's currently no way to pass a `org.gradle.api.provider.Provider` to the JavaExec.systemProperty or Test.systemProperty. There's a workaround using `org.gradle.process.CommandLineArgumentProvider`, but I intentionally don't rework these calls as Gradle is going to allow passing providers to configure system properties: https://github.com/gradle/gradle/issues/12247#issuecomment-1568427242
^KTI-1473 In Progress
2023-12-07 18:31:06 +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 = property("archivesBaseName") as String
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 = project.provider { relocatedJar.get().singleOutputFile() }
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()).matching {
exclude(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH)
}
}
into(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH.substringBeforeLast("/")) {
from {
normalizeComponentsXmlEndings.get().singleOutputFile()
}
}
}
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("libs/$jarBaseName-$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.get().singleOutputFile())
}
}
setPublishableArtifact(resultJar)