Build: Make ProGuard task cacheable

Exclude jdk files form libraries input. Instead add jdk major version
to inputs. JavaCompile task acts same to ignore fluctuations in JDK
implementations since api should remain same
This commit is contained in:
Vyacheslav Gerasimov
2020-02-04 02:44:04 +03:00
parent 03613d4708
commit 7dc24a13e4
10 changed files with 452 additions and 75 deletions
+32 -20
View File
@@ -1,7 +1,6 @@
@file:Suppress("HasPlatformType")
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import proguard.gradle.ProGuardTask
import java.util.regex.Pattern.quote
description = "Kotlin Compiler"
@@ -12,6 +11,8 @@ plugins {
java
}
val JDK_18: String by rootProject.extra
val fatJarContents by configurations.creating
val fatJarContentsStripMetadata by configurations.creating
val fatJarContentsStripServices by configurations.creating
@@ -133,13 +134,6 @@ dependencies {
compile(commonDep("org.jetbrains.intellij.deps", "trove4j"))
proguardLibraries(project(":kotlin-annotations-jvm"))
proguardLibraries(
files(
firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar"),
firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar"),
toolsJarFile()
)
)
compilerVersion(project(":compiler:compiler.version"))
proguardLibraries(project(":compiler:compiler.version"))
@@ -253,24 +247,42 @@ val packCompiler by task<Jar> {
}
}
val proguard by task<ProGuardTask> {
val proguard by task<CacheableProguardTask> {
dependsOn(packCompiler)
configuration("$rootDir/compiler/compiler.pro")
val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar")
jdkHome = File(JDK_18)
inputs.files(packCompiler.get().outputs.files.singleFile)
outputs.file(outputJar)
configuration("$projectDir/compiler.pro")
injars(
mapOf("filter" to """
!org/apache/log4j/jmx/Agent*,
!org/apache/log4j/net/JMS*,
!org/apache/log4j/net/SMTP*,
!org/apache/log4j/or/jms/MessageRenderer*,
!org/jdom/xpath/Jaxen*,
!org/jline/builtins/ssh/**,
!org/mozilla/javascript/xml/impl/xmlbeans/**,
!net/sf/cglib/**,
!META-INF/maven**,
**.class,**.properties,**.kt,**.kotlin_*,**.jnilib,**.so,**.dll,**.txt,**.caps,
META-INF/services/**,META-INF/native/**,META-INF/extensions/**,META-INF/MANIFEST.MF,
messages/**""".trimIndent()),
provider { packCompiler.get().outputs.files.singleFile }
)
outjars(fileFrom(buildDir, "libs", "$compilerBaseName-after-proguard.jar"))
libraryjars(mapOf("filter" to "!META-INF/versions/**"), proguardLibraries)
libraryjars(
files(
firstFromJavaHomeThatExists("jre/lib/rt.jar", "../Classes/classes.jar", jdkHome = jdkHome!!),
firstFromJavaHomeThatExists("jre/lib/jsse.jar", "../Classes/jsse.jar", jdkHome = jdkHome!!),
toolsJarFile(jdkHome = jdkHome!!)
)
)
printconfiguration("$buildDir/compiler.pro.dump")
// This properties are used by proguard config compiler.pro
doFirst {
System.setProperty("kotlin-compiler-jar-before-shrink", packCompiler.get().outputs.files.singleFile.canonicalPath)
System.setProperty("kotlin-compiler-jar", outputJar.canonicalPath)
}
}
val pack = if (kotlinBuildProperties.proguard) proguard else packCompiler
@@ -281,7 +293,7 @@ val jar = runtimeJar {
dependsOn(compilerVersion)
from {
zipTree(pack.get().outputs.files.singleFile)
zipTree(pack.get().singleOutputFile())
}
from {