96 lines
3.2 KiB
Groovy
96 lines
3.2 KiB
Groovy
import static groovy.io.FileType.FILES
|
|
|
|
import java.nio.file.Files
|
|
import java.nio.file.Paths
|
|
import java.util.zip.ZipEntry
|
|
|
|
def needed_jars = [
|
|
/org\.eclipse\.xtext/,
|
|
/org\.eclipse\.emf\.ecore\.xmi/,
|
|
/org\.eclipse\.emf\.ecore/,
|
|
/org\.eclipse\.emf\.common/,
|
|
/org\.antlr\.runtime/,
|
|
/com\.google\.inject/,
|
|
/org\.eclipse\.emf\.mwe\.core/,
|
|
/org\.apache\.commons\.cli/,
|
|
/org\.eclipse\.emf\.mwe2\.runtime/,
|
|
/org\.eclipse\.emf\.mwe\.utils/,
|
|
/org\.eclipse\.xtext\.util/,
|
|
/com\.google\.guava/,
|
|
/javax\.inject/,
|
|
/org\.eclipse\.xtext\.xbase/,
|
|
/org\.eclipse\.xtext\.common\.types/,
|
|
/org\.eclipse\.xtend\.lib/,
|
|
/org\.eclipse\.xtext\.xbase\.lib/,
|
|
/org\.eclipse\.xtend\.lib\.macro/,
|
|
/org\.eclipse\.equinox\.common/,
|
|
/eclipse-trace/,
|
|
/groovy-eclipse/,
|
|
/ivy-2\.5\.0\.jar/,
|
|
/groovy-3\.0\.\d-indy/,
|
|
/groovy-templates-3\.0\.\d/,
|
|
/org\.eclipse\.xtext\.xtext\.generator/,
|
|
/org\.eclipse\.emf\.codegen\.ecore/,
|
|
/org\.eclipse\.emf\.codegen/,
|
|
/org\.eclipse\.emf\.mwe2\.launch/,
|
|
/org\.eclipse\.emf\.mwe2\.language/,
|
|
/org\.eclipse\.emf\.mwe2\.lib/,
|
|
/org\.objectweb\.asm/,
|
|
/org\.apache\.commons\.logging/,
|
|
/org\.apache\.log4j/,
|
|
/com\.ibm\.icu/,
|
|
/com\.minres\.coredsl/,
|
|
/com\.minres\.coredsl\.json\.dbt_rise/
|
|
]
|
|
|
|
// Collect all jars.
|
|
def jars = []
|
|
def root = new File(project.getBasedir(), 'target/classes')
|
|
def libs = new File(project.getBasedir(), 'target/classes/lib')
|
|
def meta_inf = new File(project.getBasedir(), 'target/classes/META-INF')
|
|
|
|
libs.eachFileRecurse (FILES) { file ->
|
|
if(file.name =~/org\.codehaus\.groovy_/) { // we need to unpack this one sinc it is already jar in jar
|
|
println("Unpacking ${file}")
|
|
def zipFile = new java.util.zip.ZipFile(file)
|
|
zipFile.entries().findAll {ZipEntry entry -> !entry.directory && entry.name =~/\.jar$/}.each {ZipEntry entry ->
|
|
def outFile = new File(libs, entry.name.split(/\//)[-1])
|
|
println "Extracting file ${entry.name} to ${outFile.path} with size ${entry.size}bytes (${entry.compressedSize}bytes)"
|
|
Files.copy(zipFile.getInputStream(entry), outFile.toPath())
|
|
}
|
|
}
|
|
}
|
|
libs.eachFileRecurse (FILES) { file ->
|
|
def fileName = file.name.split("/")[-1]
|
|
if(needed_jars.find{fileName =~ it}) {
|
|
println "Adding $file to the included jars"
|
|
jars << root.toURI().relativize(file.toURI()).toString()
|
|
} else {
|
|
file.delete()
|
|
}
|
|
}
|
|
def zipFile = new java.util.zip.ZipFile(new File(project.getBasedir(), 'jar-in-jar-loader.zip'))
|
|
zipFile.entries().each {ZipEntry it ->
|
|
def path = Paths.get("${root}/", it.name)
|
|
if(it.directory){
|
|
Files.createDirectories(path)
|
|
} else {
|
|
def parentDir = path.getParent()
|
|
if (!Files.exists(parentDir)) {
|
|
Files.createDirectories(parentDir)
|
|
}
|
|
Files.deleteIfExists(path)
|
|
println "Extracting file ${it.name} to ${path} with size ${it.size}bytes (${it.compressedSize}bytes)"
|
|
Files.copy(zipFile.getInputStream(it), path)
|
|
}
|
|
}
|
|
|
|
// Write the manifest file.
|
|
Files.createDirectories( Paths.get(meta_inf.absolutePath))
|
|
def mf = new File(project.getBasedir(), 'target/classes/META-INF/MANIFEST.MF')
|
|
mf.write ''
|
|
mf << 'Manifest-Version: 1.0\n'
|
|
mf << 'Rsrc-Class-Path: ./ ' + jars.join(' ') + '\n'
|
|
mf << 'Rsrc-Main-Class: com.minres.coredsl.json.Main\n'
|
|
mf << 'Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader\n'
|