Improve handling spaces in paths during proguard pass

This commit is contained in:
Warpten 2022-12-12 01:08:49 +01:00 committed by GitHub
parent 93501248cd
commit d157756d94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -209,8 +209,8 @@ public class ProguardTask extends BaritoneGradleTask {
// Setup the template that will be used to derive the API and Standalone configs // Setup the template that will be used to derive the API and Standalone configs
List<String> template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST)); List<String> template = Files.readAllLines(getTemporaryFile(PROGUARD_CONFIG_DEST));
template.add(0, "-injars " + this.artifactPath.toString()); template.add(0, "-injars '" + this.artifactPath.toString() + "'");
template.add(1, "-outjars " + this.getTemporaryFile(PROGUARD_EXPORT_PATH)); template.add(1, "-outjars '" + this.getTemporaryFile(PROGUARD_EXPORT_PATH) + "'");
// Acquire the RT jar using "java -verbose". This doesn't work on Java 9+ // Acquire the RT jar using "java -verbose". This doesn't work on Java 9+
Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start(); Process p = new ProcessBuilder(this.getJavaBinPathForProguard(), "-verbose").start();
@ -405,9 +405,15 @@ public class ProguardTask extends BaritoneGradleTask {
Files.delete(this.proguardOut); Files.delete(this.proguardOut);
} }
Path proguardJar = getTemporaryFile(PROGUARD_JAR); // Make paths relative to work directory; fixes spaces in path to config, @"" doesn't work
Path workingDirectory = getTemporaryFile("");
Path proguardJar = workingDirectory.relativize(getTemporaryFile(PROGUARD_JAR));
config = workingDirectory.relativize(config);
// Honestly, if you still have spaces in your path at this point, you're SOL.
Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString()) Process p = new ProcessBuilder("java", "-jar", proguardJar.toString(), "@" + config.toString())
.directory(getTemporaryFile("").toFile()) // Set the working directory to the temporary folder] .directory(workingDirectory.toFile()) // Set the working directory to the temporary folder]
.start(); .start();
// We can't do output inherit process I/O with gradle for some reason and have it work, so we have to do this // We can't do output inherit process I/O with gradle for some reason and have it work, so we have to do this