From 9f8864fa85bdd5e730ef8411cee941f045a7655b Mon Sep 17 00:00:00 2001 From: "Iddo.Ziv" Date: Fri, 5 Mar 2021 06:42:49 +0200 Subject: [PATCH] changed how the zip repack is done fix building in windows env --- build.gradle | 157 ++++++++------------------------------------ fabric/build.gradle | 5 +- forge/build.gradle | 5 +- 3 files changed, 34 insertions(+), 133 deletions(-) diff --git a/build.gradle b/build.gradle index 06d5686..718e3b7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,15 +7,8 @@ buildscript { } } -import java.nio.file.FileVisitResult -import java.nio.file.Files -import java.nio.file.Path -import java.nio.file.SimpleFileVisitor -import java.nio.file.attribute.BasicFileAttributes -import java.util.stream.Stream -import java.util.zip.ZipEntry -import java.util.zip.ZipInputStream -import java.util.zip.ZipOutputStream + +import java.nio.file.* plugins { id "architectury-plugin" version "3.0.76" @@ -47,136 +40,42 @@ allprojects { } } -task buildMerged { +task buildMerged(type: Zip) { allprojects { dependsOn it.tasks.getByName("build") } - doLast { - def folder = file(".gradle/.mergemods") - folder.mkdirs() - def fabricJar = file("fabric/build/libs/${rootProject.name}-${rootProject.mod_version}-fabric.jar") - def forgeJar = file("forge/build/libs/${rootProject.name}-${rootProject.mod_version}-forge.jar") - def fabricFolder = new File(folder, ".tempFabric") - def forgeFolder = new File(folder, ".tempForge") - def mergeFolder = new File(folder, ".tempMerge") - def policyMap = new HashMap() - file("merging.policy").eachLine { - if (it.isBlank() || it.startsWith("#")) return - def env = it.substring(0, it.indexOf(' ')) - if (env == "FABRIC") - policyMap.put(it.substring(env.length() + 1), "Fabric") - else if (env == "FORGE") - policyMap.put(it.substring(env.length() + 1), "Forge") - else throw new IllegalStateException("Illegal env $env at $it") - } - forgeFolder.deleteDir() - fabricFolder.deleteDir() - mergeFolder.deleteDir() - unzip(fabricJar, fabricFolder) - unzip(forgeJar, forgeFolder) - mergeFolder.mkdirs() - Stream.of(forgeFolder, fabricFolder).each { useFolder -> - try { - Files.walkFileTree(useFolder.toPath(), new SimpleFileVisitor() { - @Override - FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - try { - File ogFile = file.toFile() - File outFile = new File(mergeFolder, ogFile.getAbsolutePath().replace(useFolder.getAbsolutePath(), "")) - outFile.getParentFile().mkdirs() - if (outFile.exists()) { - def env = useFolder.getName().substring(5) - def fileName = outFile.getAbsolutePath().replace(mergeFolder.getAbsolutePath(), "") - if (!ogFile.isFile() || !outFile.isFile() || !Arrays.equals(ogFile.readBytes(), outFile.readBytes())) { - def policyEnv = policyMap.get(fileName) - if (policyEnv == null) { - throw new IllegalStateException("Unhandled duplicate file: $fileName") - } - println "Chose env ${policyEnv.toUpperCase(Locale.ROOT)} for duplicate file: $fileName" - if (policyEnv != env) - return FileVisitResult.CONTINUE - } - } - if (!ogFile.isDirectory()) { - org.apache.commons.io.FileUtils.copyFile(ogFile, outFile) - } else { - org.apache.commons.io.FileUtils.copyDirectory(ogFile, outFile) - } - } catch (IOException e) { - e.printStackTrace() - System.exit(0) - } - return FileVisitResult.CONTINUE - } - }) - } catch (IOException e) { - e.printStackTrace() - System.exit(0) + def folder = file(".gradle/.mergemods") + folder.mkdirs() + def fabricJar = file("fabric/build/libs/${rootProject.name}-${rootProject.mod_version}-fabric.jar") + def forgeJar = file("forge/build/libs/${rootProject.name}-${rootProject.mod_version}-forge.jar") + def fabricFolder = new File(folder, ".tempFabric") + def forgeFolder = new File(folder, ".tempForge") + def mergeFolder = new File(folder, ".tempMerge") + file("merging.policy").eachLine { + if (it.isBlank() || it.startsWith("#")) return + def env = it.substring(0, it.indexOf(' ')).toLowerCase() + def path = Paths.get(it.substring(env.length() + 1)).toString() + filesMatching(path) { + if (!it._gr_dyn_.toString().contains(env)) { + it.exclude() } } - File finalMerge = file("build/libs/${rootProject.name}-${rootProject.mod_version}.jar") - finalMerge.parentFile.mkdirs() - finalMerge.delete() - compress(mergeFolder.toPath(), finalMerge) - folder.deleteDir() } + forgeFolder.deleteDir() + fabricFolder.deleteDir() + mergeFolder.deleteDir() + mergeFolder.mkdirs() + archivesBaseName = "${rootProject.name}" + archiveExtension = "jar" + destinationDir = file('build/libs') + duplicatesStrategy(DuplicatesStrategy.WARN) + + from zipTree(fabricJar) + from zipTree(forgeJar) } rootProject.subprojects.forEach { buildMerged.mustRunAfter it.tasks.getByName("build") } -static def compress(Path sourceDir, File zipFile) { - try { - final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFile)) - Files.walkFileTree(sourceDir, new SimpleFileVisitor() { - @Override - FileVisitResult visitFile(Path file, BasicFileAttributes attributes) { - try { - Path targetFile = sourceDir.relativize(file) - outputStream.putNextEntry(new ZipEntry(targetFile.toString())) - byte[] bytes = Files.readAllBytes(file) - outputStream.write(bytes, 0, bytes.length) - outputStream.closeEntry() - } catch (IOException e) { - e.printStackTrace() - } - return FileVisitResult.CONTINUE - } - }) - outputStream.close() - } catch (IOException e) { - e.printStackTrace() - } -} -static def unzip(File zipFile, File destDir) { - if (!destDir.exists()) - destDir.mkdirs() - FileInputStream fis - byte[] buffer = new byte[1024] - try { - fis = new FileInputStream(zipFile) - ZipInputStream zis = new ZipInputStream(fis) - ZipEntry zipEntry = zis.getNextEntry() - while (zipEntry != null) { - if (!zipEntry.isDirectory()) { - File newFile = new File(destDir, zipEntry.getName()) - new File(newFile.getParent()).mkdirs() - FileOutputStream fos = new FileOutputStream(newFile) - int len - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len) - } - fos.close() - } - zis.closeEntry() - zipEntry = zis.getNextEntry() - } - zis.closeEntry() - zis.close() - fis.close() - } catch (IOException e) { - e.printStackTrace() - } -} \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index b8a902a..ba0bcbd 100755 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -7,7 +7,7 @@ minecraft { } architectury { - transformerVersion = "2.0.9999" +// transformerVersion = "2.0.9999" platformSetupLoomIde() fabric() } @@ -63,4 +63,5 @@ remapJar { dependsOn(shadowJar) input.set(shadowJar.archivePath) archiveClassifier = "fabric" -} \ No newline at end of file +} + diff --git a/forge/build.gradle b/forge/build.gradle index 95ece2e..6b3e683 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -7,7 +7,7 @@ configurations { } architectury { - transformerVersion = "2.0.9999" +// transformerVersion = "2.0.9999" platformSetupLoomIde() forge() } @@ -57,4 +57,5 @@ remapJar { dependsOn(shadowJar) input.set(shadowJar.archivePath) archiveClassifier = "forge" -} \ No newline at end of file +} +