buildscript { repositories { mavenCentral() } dependencies { classpath fileTree("../i2pjars") { include '*.jar' } classpath 'gnu.getopt:java-getopt:1.0.13' } } apply plugin : 'java' dependencies { compile project(":webui") } def buildDir = new File("$buildDir") def zipDir = new File(buildDir, "zip") def libDir = new File(zipDir, "lib") def consoleDir = new File(zipDir, "console") def webAppDir = new File(consoleDir, "webapps") def keystore = new File(System.getProperty("user.home")+"/.i2p-plugin-keys/plugin-su3-keystore.ks") String libDirPath() { def libDir = new File("$buildDir/zip/lib") libDir.listFiles().stream().map({ "\$PLUGIN/lib/" + it.getName() }).collect(java.util.stream.Collectors.joining(',')) } task pluginConfig { doLast { def binding = [ "version" : project.version + "-b" + project.buildNumber, "author" : project.author, "signer" : project.signer, "websiteURL" : project.websiteURL, "updateURLsu3" : project.updateURLsu3, "i2pVersion" : project.i2pVersion ] def templateFile = new File("$projectDir/templates/plugin.config.template") def engine = new groovy.text.SimpleTemplateEngine() def output = engine.createTemplate(templateFile).make(binding) zipDir.mkdirs() def outputFile = new File(zipDir,"plugin.config") outputFile.text = output } } task clientsConfig { doLast { def binding = [ "libname" : libDirPath(), "version" : project.version ] def templateFile = new File("$projectDir/templates/clients.config.template") def engine = new groovy.text.SimpleTemplateEngine() def output = engine.createTemplate(templateFile).make(binding) def outputFile = new File(zipDir, "clients.config") outputFile.text = output } } task pluginDir { dependsOn ':webui:assemble' doLast { task -> libDir.mkdirs() def webapp = project(":webui") def i2pjars = task.project.fileTree("../i2pjars").getFiles() webapp.configurations.runtime.each { if (!i2pjars.contains(it)) { def dest = new File(libDir, it.getName()) java.nio.file.Files.copy(it.toPath(), dest.toPath()) } } def jarFile = webapp.configurations.jarArtifact.getAllArtifacts().file[0] def dest = new File(libDir, jarFile.getName()) java.nio.file.Files.copy(jarFile.toPath(), dest.toPath()) webAppDir.mkdirs() def warFile = webapp.configurations.warArtifact.getAllArtifacts().file[0] dest = new File(webAppDir, "MuWire.war") java.nio.file.Files.copy(warFile.toPath(), dest.toPath()) "zip -d ${dest.toString()} *.jar".execute() } } task webappConfig { doLast { def cPath = "webapps.MuWire.classpath=" + libDirPath() def webappConfig = new File(consoleDir, "webapps.config") webappConfig.text = cPath } } task pack { doLast { if (project.pack200 == "true") { libDir.listFiles().stream().filter( { it.getName().endsWith(".jar") } ). forEach { println "packing $it" def name = it.toString() println "pack200 --no-gzip ${name}.pack $name".execute().text it.delete() } } else { println "pack200 disabled" } } } task pluginZip(type: Zip) { archiveFileName = "MuWire.zip" destinationDirectory = buildDir from zipDir } task sign { doLast { def password = project.keystorePassword if (password == "") { println "enter your keystore password:" def reader = new BufferedReader(new InputStreamReader(System.in)) password = reader.readLine() } def su3args = [] def version = project.version + "-b" + project.buildNumber su3args << 'sign' << '-t' << '6' << '-c' << 'PLUGIN' << '-f' << '0' << '-p' << password << \ "$buildDir/MuWire.zip".toString() << "$buildDir/MuWire.su3".toString() << \ keystore.getAbsoluteFile().toString() << version << project.signer println "now enter private key password for signer $project.signer" net.i2p.crypto.SU3File.main(su3args.toArray(new String[0])) } } webappConfig.dependsOn pluginDir clientsConfig.dependsOn webappConfig pack.dependsOn webappConfig pluginZip.dependsOn(webappConfig,pluginConfig,pack) sign.dependsOn pluginZip assemble.dependsOn sign