| import java.util.jar.JarEntry |
| import java.util.jar.JarOutputStream |
| import java.util.zip.ZipEntry |
| import java.util.zip.ZipFile |
| |
| import static java.nio.charset.StandardCharsets.UTF_8 |
| |
| def customOrder(ZipEntry a, ZipEntry b) { |
| if (a.name == 'META-INF/MANIFEST.MF' && b.name == 'META-INF/MANIFEST.MF') return 0 |
| if (a.name == 'META-INF/MANIFEST.MF') return -1 |
| if (b.name == 'META-INF/MANIFEST.MF') return 1 |
| return a.name.compareTo(b.name) |
| } |
| |
| dependencies { |
| testCompile project(':test:org.eclipse.virgo.test.stubs') |
| testCompile project(':medic:org.eclipse.virgo.medic.test') |
| |
| testRuntime 'org.aspectj:aspectjrt' |
| |
| compile group: "org.eclipse.virgo.mirrored", name: "org.eclipse.osgi", version: equinoxVersion, configuration: "compile", ext: "jar" |
| |
| implementation 'org.springframework:spring-beans' |
| |
| compile project(':util:org.eclipse.virgo.util.math') |
| compile project(':util:org.eclipse.virgo.util.io') |
| compile project(':util:org.eclipse.virgo.util.osgi.manifest') |
| compile project(':medic:org.eclipse.virgo.medic') |
| compile project(':nano:org.eclipse.virgo.nano.core') |
| compile project(':repository:org.eclipse.virgo.repository') |
| compile project(':kernel:org.eclipse.virgo.kernel.artifact') |
| } |
| |
| task rewriteJar(dependsOn: jar) { |
| tasks['uploadArchives'].dependsOn('rewriteJar') |
| tasks['assemble'].dependsOn('rewriteJar') |
| String jarFileName |
| // store name of the created jar file |
| jar.outputs.files.each { |
| println it.getPath() |
| jarFileName = it.getPath() |
| } |
| doLast() { |
| ZipFile jarFile = new ZipFile(jarFileName) |
| println "------------" |
| println "Reordering content of jar file ${jarFileName}:" |
| println "------------" |
| jarFile.entries().findAll{ !it.directory }.each { println it.name } |
| println "------------" |
| String cloneFileName = new File(jarFileName).path + "-clone" |
| FileOutputStream fos = new FileOutputStream(cloneFileName) |
| |
| String manifest |
| jarFile.entries().findAll { it.name == "META-INF/MANIFEST.MF" }.each { |
| manifest = jarFile.getInputStream(it).text |
| } |
| println "------------" |
| println manifest |
| println "------------" |
| |
| JarOutputStream jarOutputStream = new JarOutputStream(fos, |
| new java.util.jar.Manifest(new ByteArrayInputStream(manifest.getBytes(UTF_8)))) |
| |
| println "------------" |
| jarFile.entries().findAll { !it.directory && !(it.name == "META-INF/MANIFEST.MF") }.sort( {a,b -> customOrder(a,b) } ).each { |
| println "adding ${it.name} to ${cloneFileName}" |
| jarOutputStream.putNextEntry(new JarEntry(it.name)) |
| jarOutputStream << jarFile.getInputStream(it) |
| } |
| jarOutputStream.close() |
| jarFile.close() |
| |
| println "finished writing ${cloneFileName}" |
| println "------------" |
| |
| println "from ${cloneFileName} to ${jarFileName}" |
| println "within ${file(cloneFileName).parentFile.path} is ${file(cloneFileName).name}" |
| println "rename ${file(cloneFileName).name} -> ${file(jarFileName).name}" |
| |
| delete file(jarFileName) |
| copy { |
| from file(file(cloneFileName).parentFile.path) |
| into file(file(cloneFileName).parentFile.path) |
| rename { String fileName -> |
| fileName.replace(file(cloneFileName).name, file(jarFileName).name) |
| } |
| } |
| delete file(cloneFileName) |
| println "------------" |
| println "Reordered content of jar file ${jarFileName}:" |
| println "------------" |
| new ZipFile(jarFileName).entries().findAll{ !it.directory }.each { println it.name } |
| println "------------" |
| } |
| } |