Files
kotlin-fork/libraries/scripting/dependencies-maven-all/build.gradle.kts
T
Yahor Berdnikau e25778a719 Fix ConcurrentModificationException
This exception is happening on build configuration trying to remove
default jar task artifacts from published one. I've set 'jar' task
to be always disabled instead and just add shadow jar to artifacts.
2022-05-24 07:58:36 +00:00

151 lines
4.4 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 JDK_18: String by rootProject.extra
val jarBaseName = property("archivesBaseName") as String
val embedded by configurations
embedded.apply {
exclude("org.slf4j", "slf4j-api")
}
plugins {
kotlin("jvm")
id("jps-compatible")
}
dependencies {
embedded(project(":kotlin-scripting-dependencies-maven")) { isTransitive = false }
embedded(project(":kotlin-scripting-dependencies")) { isTransitive = false }
embedded("org.apache.maven.resolver:maven-resolver-connector-basic:1.8.0")
embedded("org.apache.maven.resolver:maven-resolver-transport-file:1.8.0")
embedded("org.apache.maven.resolver:maven-resolver-transport-wagon:1.8.0")
embedded("org.apache.maven.resolver:maven-resolver-impl:1.8.0")
embedded("org.apache.maven:maven-core:3.8.5")
embedded("org.apache.maven.wagon:wagon-http:3.5.1")
}
sourceSets {
"main" {}
"test" {}
}
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(File(buildDir, "libs"))
archiveClassifier.set("relocated")
transform(ComponentsXmlResourceTransformer())
if (kotlinBuildProperties.relocation) {
(packagesToRelocate + mavenPackagesToRelocate).forEach {
relocate(it, "$kotlinEmbeddableRootPackage.$it")
}
}
}
val normalizeComponentsXmlEndings by tasks.registering {
dependsOn(relocatedJar)
val outputDirectory = buildDir.resolve(name)
val outputFile = outputDirectory.resolve(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")
outputDirectory.mkdirs()
outputFile.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(fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar"))
javaLauncher.set(project.getToolchainLauncherFor(JdkMajorVersion.JDK_1_8))
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)