Remove dependency on shadow jar

Bug: 211400706
Change-Id: I0212f9c4eb64296fde5e3f440e6d86ab4c04c05c
diff --git a/build.gradle b/build.gradle
index 48e01cd..bfd11a0 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
 import dx.DexMergerTask
 import dx.DxTask
 import net.ltgt.gradle.errorprone.CheckSeverity
@@ -21,9 +20,6 @@
         gradlePluginPortal()
         jcenter()
     }
-    dependencies {
-        classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
-    }
 }
 
 plugins {
@@ -253,6 +249,8 @@
     examplesTestNGRunnerCompile group: 'org.testng', name: 'testng', version: testngVersion
     testCompile sourceSets.examples.output
     testCompile "junit:junit:$junitVersion"
+    testCompile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
+    testCompile "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
     testCompile group: 'org.smali', name: 'smali', version: smaliVersion
     testCompile files('third_party/jasmin/jasmin-2.4.jar')
     testCompile files('third_party/jdwp-tests/apache-harmony-jdwp-tests-host.jar')
@@ -273,8 +271,6 @@
     apiUsageSampleCompile "com.google.guava:guava:$guavaVersion"
     kotlinR8TestResourcesCompileOnly "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
     errorprone("com.google.errorprone:error_prone_core:$errorproneVersion")
-    testImplementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
-    testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
 }
 
 def r8LibPath = "$buildDir/libs/r8lib.jar"
@@ -734,47 +730,57 @@
     }
 }
 
-static mergeServiceFiles(ShadowJar task) {
-    // Everything under META-INF is not included by default.
-    // Should include before 'relocate' so that the service file path and its content
-    // are properly relocated as well.
-    task.mergeServiceFiles {
-        include 'META-INF/services/*'
+def repackageDepFile(file) {
+    if (file.getName().endsWith('.jar')) {
+        return zipTree(file).matching {
+            exclude '**/module-info.class'
+            exclude 'META-INF/maven/**'
+            exclude 'META-INF/LICENSE.txt'
+            exclude 'META-INF/MANIFEST.MF'
+        }
+    } else {
+        return fileTree(file)
     }
 }
 
-task repackageDepsNew(type: ShadowJar) {
+task repackageDeps(type: Jar) {
     dependsOn downloadCloudDeps
-    configurations = [project.configurations.runtimeClasspath]
-    mergeServiceFiles(it)
-    exclude { it.getRelativePath().getPathString().endsWith("module-info.class") }
-    exclude { it.getRelativePath().getPathString().startsWith("META-INF/maven/") }
-    baseName 'deps_all'
+    dependsOn project.configurations.runtimeClasspath
+    project.configurations.runtimeClasspath.forEach {
+        from repackageDepFile(it)
+    }
+    archiveFileName = 'deps_all.jar'
 }
 
-task repackageSourcesNew(type: ShadowJar) {
+task repackageTestDeps(type: Jar) {
+    dependsOn downloadCloudDeps
+    dependsOn project.configurations.testCompile
+    project.configurations.testCompile.forEach {
+        from repackageDepFile(it)
+    }
+    archiveFileName = 'test_deps_all.jar'
+}
+
+task repackageSources(type: Jar) {
     // If this fails then remove all generated folders from
     // build/classes/java/test that is not {com,dalvik}
     from sourceSets.main.output
-    mergeServiceFiles(it)
-    baseName 'sources_main'
+    archiveFileName = 'sources_main.jar'
 }
 
-task repackageSources11New(type: ShadowJar) {
+task repackageSources11(type: Jar) {
     dependsOn compileMainWithJava11
     from file(java11ClassFiles)
-    mergeServiceFiles(it)
-    baseName 'sources_main_11'
+    archiveFileName = 'sources_main_11.jar'
 }
 
-def r8CreateTask(name, baseNameName, sources, includeSwissArmyKnife) {
-    return tasks.create("r8Create${name}", ShadowJar) {
+def r8CreateTask(name, baseName, sources, includeSwissArmyKnife) {
+    return tasks.create("r8Create${name}", Jar) {
+        dependsOn sources
         from consolidatedLicense.outputs.files
-        from sources
+        from sources.collect { zipTree(it) }
         exclude "$buildDir/classes/**"
-        baseName baseNameName
-        classifier = null
-        version = null
+        archiveFileName = baseName
         if (includeSwissArmyKnife) {
             manifest {
                 attributes 'Main-Class': 'com.android.tools.r8.SwissArmyKnife'
@@ -823,26 +829,26 @@
 }
 
 task r8WithDeps {
-    dependsOn repackageSourcesNew
-    dependsOn repackageDepsNew
-    inputs.files ([repackageSourcesNew.outputs, repackageDepsNew.outputs])
+    dependsOn repackageSources
+    dependsOn repackageDeps
+    inputs.files ([repackageSources.outputs, repackageDeps.outputs])
     def r8Task = r8CreateTask(
             'WithDeps',
-            'r8_with_deps',
-            repackageSourcesNew.outputs.files + repackageDepsNew.outputs.files,
+            'r8_with_deps.jar',
+            repackageSources.outputs.files + repackageDeps.outputs.files,
             true)
     dependsOn r8Task
     outputs.files r8Task.outputs.files
 }
 
 task r8WithDeps11 {
-    dependsOn repackageSources11New
-    dependsOn repackageDepsNew
-    inputs.files ([repackageSources11New.outputs, repackageDepsNew.outputs])
+    dependsOn repackageSources11
+    dependsOn repackageDeps
+    inputs.files ([repackageSources11.outputs, repackageDeps.outputs])
     def r8Task = r8CreateTask(
             'WithDeps11',
-            'r8_with_deps_11',
-            repackageSources11New.outputs.files + repackageDepsNew.outputs.files,
+            'r8_with_deps_11.jar',
+            repackageSources11.outputs.files + repackageDeps.outputs.files,
             true)
     dependsOn r8Task
     outputs.files r8Task.outputs.files
@@ -863,12 +869,12 @@
 }
 
 task r8WithoutDeps {
-    dependsOn repackageSourcesNew
-    inputs.files repackageSourcesNew.outputs
+    dependsOn repackageSources
+    inputs.files repackageSources.outputs
     def r8Task = r8CreateTask(
             'WithoutDeps',
-            'r8_without_deps',
-            repackageSourcesNew.outputs.files,
+            'r8_without_deps.jar',
+            repackageSources.outputs.files,
             true)
     dependsOn r8Task
     outputs.files r8Task.outputs.files
@@ -885,24 +891,24 @@
 }
 
 task r8NoManifestWithoutDeps {
-    dependsOn repackageSourcesNew
-    inputs.files repackageSourcesNew.outputs
+    dependsOn repackageSources
+    inputs.files repackageSources.outputs
     def r8Task = r8CreateTask(
             'NoManifestWithoutDeps',
-            'r8_no_manifest_without_deps',
-            repackageSourcesNew.outputs.files,
+            'r8_no_manifest_without_deps.jar',
+            repackageSources.outputs.files,
             false)
     dependsOn r8Task
     outputs.files r8Task.outputs.files
 }
 
 task r8NoManifestWithDeps {
-    dependsOn repackageSourcesNew
-    inputs.files ([repackageSourcesNew.outputs, repackageDepsNew.outputs])
+    dependsOn repackageSources
+    inputs.files ([repackageSources.outputs, repackageDeps.outputs])
     def r8Task = r8CreateTask(
             'NoManifestWithDeps',
-            'r8_no_manifest_with_deps',
-            repackageSourcesNew.outputs.files + repackageDepsNew.outputs.files,
+            'r8_no_manifest_with_deps.jar',
+            repackageSources.outputs.files + repackageDeps.outputs.files,
             false)
     dependsOn r8Task
     outputs.files r8Task.outputs.files
@@ -925,10 +931,10 @@
     outputs.file "${buildDir}/libs/r8_no_manifest.jar"
 }
 
-task D8(type: ShadowJar) {
+task D8(type: Jar) {
     dependsOn r8
     from r8.outputs.files[0]
-    baseName 'd8'
+    archiveFileName = 'd8.jar'
     manifest {
         attributes 'Main-Class': 'com.android.tools.r8.D8'
     }
@@ -991,8 +997,8 @@
     destinationDir file('build/libs')
 }
 
-task testJarSources(type: ShadowJar, dependsOn: [testClasses, buildLibraryDesugarConversions]) {
-    baseName = "r8testsbase"
+task testJarSources(type: Jar, dependsOn: [testClasses, buildLibraryDesugarConversions]) {
+    archiveFileName = "r8testsbase.jar"
     from sourceSets.test.output
     // We only want to include tests that use R8 when generating keep rules for applymapping.
     include "com/android/tools/r8/**"
@@ -1074,9 +1080,9 @@
             r8NoManifestWithoutDeps,
             r8LibExludeDepsPath,
             "--release",
-            repackageDepsNew.outputs.files
-    ).dependsOn(repackageDepsNew)
-    inputs.files ([r8NoManifestWithoutDeps.outputs, repackageDepsNew.outputs])
+            repackageDeps.outputs.files
+    ).dependsOn(repackageDeps)
+    inputs.files ([r8NoManifestWithoutDeps.outputs, repackageDeps.outputs])
     outputs.file r8LibExludeDepsPath
 }
 
@@ -1111,7 +1117,7 @@
             R8LibNoDeps,
             r8RetraceExludeDepsPath,
             "--release",
-            repackageDepsNew.outputs.files
+            repackageDeps.outputs.files
     ).dependsOn(R8LibNoDeps)
     outputs.file r8RetraceExludeDepsPath
 }
@@ -1123,7 +1129,7 @@
 
 task jctfCommonJar(type: Jar) {
     from sourceSets.jctfCommon.output
-    baseName 'jctfCommon'
+    archiveFileName = 'jctfCommon.jar'
 }
 
 artifacts {
@@ -1157,13 +1163,13 @@
 
 task buildCfSegments(type: Jar, dependsOn: downloadDeps) {
     from sourceSets.cfSegments.output
-    baseName 'cf_segments'
+    archiveFileName = 'cf_segments.jar'
     destinationDir file('build/libs')
 }
 
 task buildR8ApiUsageSample(type: Jar) {
     from sourceSets.apiUsageSample.output
-    baseName 'r8_api_usage_sample'
+    archiveFileName = 'r8_api_usage_sample.jar'
     destinationDir file('tests')
 }
 
@@ -1788,7 +1794,7 @@
 }
 
 task buildPreNJdwpTestsJar(type: Jar) {
-    baseName = 'jdwp-tests-preN'
+    archiveFileName = 'jdwp-tests-preN.jar'
     from zipTree('third_party/jdwp-tests/apache-harmony-jdwp-tests-host.jar')
     // Exclude the classes containing java8
     exclude 'org/apache/harmony/jpda/tests/jdwp/InterfaceType/*.class'