Use shadow gralde plugin on 1.8+ and enable its minimize option

Cuts RM jar sizes in half.
This commit is contained in:
Jonas Herzig
2019-03-15 12:00:57 +01:00
parent fc0f070721
commit f795b27251

View File

@@ -23,6 +23,9 @@ buildscript {
} }
dependencies { dependencies {
if (mcVersion >= 10800) {
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.2' // Gradle 4+ only
}
classpath 'org.ow2.asm:asm:6.0' classpath 'org.ow2.asm:asm:6.0'
classpath('com.github.SpongePowered:MixinGradle:dcfaf61'){ // 0.6 classpath('com.github.SpongePowered:MixinGradle:dcfaf61'){ // 0.6
// Because forgegradle requires 6.0 (not -debug-all) while mixingradle depends on 5.0 // Because forgegradle requires 6.0 (not -debug-all) while mixingradle depends on 5.0
@@ -46,6 +49,8 @@ def mcVersionStr = "${(int)(mcVersion/10000)}.${(int)(mcVersion/100)%100}" + (mc
def FG3 = mcVersion >= 11300 def FG3 = mcVersion >= 11300
if (mcVersion >= 10800) { if (mcVersion >= 10800) {
apply plugin: 'com.github.johnrengelman.shadow'
if (FG3) { if (FG3) {
apply plugin: 'net.minecraftforge.gradle' apply plugin: 'net.minecraftforge.gradle'
// FIXME use mixin plugin once updated // FIXME use mixin plugin once updated
@@ -150,6 +155,14 @@ configurations {
// Include dep in fat jar with relocation and minimization // Include dep in fat jar with relocation and minimization
shadow shadow
compile.extendsFrom shadow compile.extendsFrom shadow
// Like shadow but run the dep through reobfJar (jGui needs this because it references MC)
shadowReobf
compile.extendsFrom shadowReobf
// Combination of shadow and shadowReobf
relocate {
extendsFrom shadow
extendsFrom shadowReobf
}
} }
def shadeExclusions = { def shadeExclusions = {
@@ -194,7 +207,7 @@ dependencies {
def jGuiVersion = project.name def jGuiVersion = project.name
if (['1.10.2', '1.11', '1.11.2'].contains(jGuiVersion)) jGuiVersion = '1.9.4' if (['1.10.2', '1.11', '1.11.2'].contains(jGuiVersion)) jGuiVersion = '1.9.4'
if (['1.12.1', '1.12.2'].contains(jGuiVersion)) jGuiVersion = '1.12' if (['1.12.1', '1.12.2'].contains(jGuiVersion)) jGuiVersion = '1.12'
shadow(project(":jGui:$jGuiVersion")){ shadowReobf(project(":jGui:$jGuiVersion")){
transitive = false // FG 1.2 puts all MC deps into the compile configuration and we don't want to shade those transitive = false // FG 1.2 puts all MC deps into the compile configuration and we don't want to shade those
exclude group: 'org.projectlombok', module: 'lombok' // runtime only for @SneakyThrows which isn't used exclude group: 'org.projectlombok', module: 'lombok' // runtime only for @SneakyThrows which isn't used
} }
@@ -291,14 +304,11 @@ sourceSets {
} }
} }
if (!FG3) { // FIXME
def reobfTask = mcVersion >= 10800 ? tasks.reobfJar : tasks.reobf
task configureRelocation() { task configureRelocation() {
dependsOn tasks.jar dependsOn tasks.jar
dependsOn configurations.shadow dependsOn configurations.relocate
doLast { doLast {
def extraSrg = mcVersion >= 10800 ? reobfTask.extraSrgLines : reobfTask.extraSrg def pkgs = files(configurations.relocate).filter { it.exists() }.collect {
files(configurations.shadow).filter { it.exists() }.collect {
def tree = it.isDirectory() ? fileTree(it) : zipTree(it) def tree = it.isDirectory() ? fileTree(it) : zipTree(it)
def pkgs = [].toSet() def pkgs = [].toSet()
tree.visit { file -> tree.visit { file ->
@@ -310,33 +320,61 @@ task configureRelocation() {
} }
} }
pkgs pkgs
}.flatten().unique().each { pkg -> }.flatten().unique()
if (mcVersion >= 10800) {
pkgs.each { pkg ->
def pkgName = pkg.replace('/', '.')
shadowJar.relocate pkgName, 'com.replaymod.lib.' + pkgName
}
} else {
def extraSrg = tasks.reobf.extraSrg
pkgs.each { pkg ->
extraSrg << "PK: $pkg com/replaymod/lib/$pkg".toString() extraSrg << "PK: $pkg com/replaymod/lib/$pkg".toString()
} }
} }
}
reobfTask.dependsOn configureRelocation
}
if (mcVersion <= 10710) {
// Dummy task so "./gradlew reobfJar" also builds 1.7.10
task reobfJar() {
dependsOn reobf
} }
} }
if (mcVersion >= 10800) {
tasks.removeByName('shadowJar') // we want to base our shadowed jar on the reobfJar output, not the sourceSet output
task shadowJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
from { tasks.jar.archivePath }
manifest.inheritFrom tasks.jar.manifest
from project.configurations.shade
configurations = [project.configurations.shadow]
exclude 'META-INF/INDEX.LIST', 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'module-info.class'
dependsOn tasks.configureRelocation
afterEvaluate { dependsOn tasks.reobfJar }
minimize {
exclude(dependency('.*spongepowered:mixin:.*'))
}
}
} else {
tasks.reobf.dependsOn tasks.configureRelocation
// Dummy task so "./gradlew shadowJar" also works on 1.7.10
task shadowJar(type: Jar) {
from { zipTree(tasks.jar.archivePath) }
afterEvaluate { manifest = tasks.jar.manifest }
dependsOn tasks.reobf
}
}
tasks.assemble.dependsOn tasks.shadowJar
if (mcVersion <= 10710) // anything above uses shadowJar
jar { jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE duplicatesStrategy = DuplicatesStrategy.EXCLUDE
dependsOn configurations.compile dependsOn configurations.compile
dependsOn configurations.shade dependsOn configurations.shade
dependsOn configurations.shadow dependsOn configurations.relocate
if (mcVersion <= 10710) {
from project.mixinRefMap from project.mixinRefMap
}
def shade = { files(configurations.shadow + configurations.shade) } def shade = { files(configurations.relocate + configurations.shade) }
def noticeDir = file("$buildDir/NOTICE") def noticeDir = file("$buildDir/NOTICE")
doFirst { doFirst {
@@ -358,6 +396,12 @@ jar {
} }
} }
} }
}
jar {
classifier = 'raw'
from { files(configurations.shadowReobf).collect { it.isDirectory() ? it : zipTree(it) } }
manifest { manifest {
attributes 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', attributes 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',