plugins { id 'java-library' id 'war' } sourceSets { main { java { srcDir 'java/src' srcDir 'java/build/messages-src' srcDir 'java/build/messages-proxy-src' } } test { java { srcDir 'java/test/junit' } } } dependencies { api project(':core') api project(':apps:ministreaming') api 'gnu.getopt:java-getopt:1.0.13' api project(':apps:jetty') // seems like it should be compileOnly but that doesn't work implementation 'org.apache.ant:ant:1.10.14' api fileTree("../jetty/apache-tomcat-${tomcatVersion}") } // Create the java files from the po files. The jar task will compile them. // This requires gettext 0.19 or higher. // We don't support the "slow way" task bundleProxy { doLast { if (!(new File("$buildDir/classes/java/main/net/i2p/i2ptunnel/proxy/messages_de.class")).exists()) println "apps/i2ptunnel/java/bundle-messages-proxy.sh".execute().text } } task bundle { doLast { if (!(new File("$buildDir/classes/java/main/net/i2p/i2ptunnel/web/messages_de.class")).exists()) println "apps/i2ptunnel/java/bundle-messages.sh".execute().text } } task i2ptunnelJar(type: Jar) { from sourceSets.main.output exclude '**/web/*.class' exclude '**/ui/*.class' exclude '**/EditBean.class' exclude '**/IndexBean.class' manifest { attributes 'Main-Class': 'net.i2p.i2ptunnel.I2PTunnel' attributes 'Class-Path': 'i2p.jar mstreaming.jar' } from ('resources', { into "net/i2p/i2ptunnel/resources" }) from ('../routerconsole/jsp', { include 'themes/console/*/*.css' include 'themes/console/images/i2plogo.png' include 'themes/console/images/favicon.ico' include 'themes/console/images/itoopie_sm.png' into "net/i2p/i2ptunnel/resources" }) } task helpersJar(type: Jar) { from sourceSets.main.output include '**/EditBean.class' include '**/IndexBean.class' include 'net/i2p/i2ptunnel/ui/**' include 'net/i2p/i2ptunnel/web/SSLHelper.class' archiveBaseName='i2pTunnelHelpers' } task copyJsps(type: Copy) { doFirst { def f = file("$buildDir/jsp_copy") f.mkdirs() } from("jsp") include("**/*.jsp") include("**/*.jsi") into("$buildDir/jsp_copy") doLast { fileTree("$buildDir/jsp_copy").getFiles().each { if (it.getName().endsWith("jsi")) it.setLastModified(0) } } } task precompileJsp(type : JavaExec) { dependsOn copyJsps classpath = sourceSets.main.runtimeClasspath main = 'net.i2p.servlet.util.JspC' jvmArgs "-Dtomcat.util.scan.StandardJarScanFilter.jarsToSkip=commons-collections.jar,junit.jar,junit4.jar" jvmArgs "-Dbuild.reproducible=true" args "-d" args "jsp/WEB-INF/classes" args "-v" args "-p" args "net.i2p.i2ptunnel.jsp" args "-webinc" args "$buildDir/web-fragment.xml" args "-webapp" args "$buildDir/jsp_copy" doLast { def output = new File("$buildDir/compiledJsps") output.mkdirs() ant.javac(srcDir: "jsp/WEB-INF/classes", classpath: sourceSets.main.runtimeClasspath.asPath, debug : true, includeAntRuntime : false, deprecation : "on", source: project.sourceCompatibility, target: project.targetCompatibility, destDir:file("$buildDir/compiledJsps")) def fragment = file("$buildDir/web-fragment.xml").text def templateXML = file("jsp/web.xml").text def webXML = templateXML.replace("", fragment) def multipart = "" + "134217728" + "134217728" + "262144" + "" def multipartServlets = ["register"] multipartServlets = multipartServlets.collect { "net.i2p.i2ptunnel.jsp.${it}_jsp" } multipartServlets.each { webXML = webXML.replace(it, it + multipart) } file("$buildDir/web.xml").text = webXML } } i2ptunnelJar.dependsOn bundleProxy war.dependsOn bundle,precompileJsp // not needed unless we're building for both android and regular task tempBeansJar(type: Jar) { from sourceSets.main.output include '**/EditBean.class' include '**/ui/*.class' include '**/IndexBean.class' archiveBaseName = 'temp-beans' } // only for android task uiJar(type: Jar) { archiveBaseName = 'i2ptunnel-ui' from sourceSets.main.output include '**/ui/*.class' manifest { attributes 'Class-Path' : 'i2p.jar mstreaming.jar i2ptunnel.jar' } } artifacts { archives i2ptunnelJar,war //, tempBeansJar, uiJar } war { duplicatesStrategy 'exclude' include '**/EditBean.class' include '**/ui/*.class' include '**/IndexBean.class' from 'jsp' from ("$buildDir/compiledJsps") { include '**/*.class' into "WEB-INF/classes" } rootSpec.exclude('**/*.jar') rootSpec.exclude('/net/i2p/i2ptunnel/*.class') rootSpec.exclude('/net/i2p/i2ptunnel/access') rootSpec.exclude('/net/i2p/i2ptunnel/irc') rootSpec.exclude('/net/i2p/i2ptunnel/localServer') rootSpec.exclude('/net/i2p/i2ptunnel/proxy') rootSpec.exclude('/net/i2p/i2ptunnel/socks') rootSpec.exclude('/net/i2p/i2ptunnel/streamr') rootSpec.exclude('/net/i2p/i2ptunnel/udp') rootSpec.exclude('/net/i2p/i2ptunnel/udpTunnel') from("jsp") { exclude 'web.xml' exclude '*.jsi' exclude '*.jsp' } webXml = file("$buildDir/web.xml") }