diff --git a/apps/addressbook/build.gradle b/apps/addressbook/build.gradle
index 72c4e6f483cf1b57372d288d33041e309d8f72f0..ff0625c61f9d76b4b79c16b55e2cf89ebe75e0ab 100644
--- a/apps/addressbook/build.gradle
+++ b/apps/addressbook/build.gradle
@@ -13,6 +13,10 @@ dependencies {
     providedCompile project(':apps:jetty')
 }
 
+jar {
+    exclude { it.name == 'Servlet.class' }
+}
+
 war {
     webXml = file('web.xml')
 }
diff --git a/apps/i2psnark/build.gradle b/apps/i2psnark/build.gradle
index 15c3fbec8b11f11f64112e8c06746251b7b81a84..0c4e1f701323b99dbbb8bf2026bc4aef0b17d738 100644
--- a/apps/i2psnark/build.gradle
+++ b/apps/i2psnark/build.gradle
@@ -4,16 +4,37 @@ sourceSets {
     main {
         java {
             srcDir 'java/src'
+            include 'org/klomp/snark/web/**'
+        }
+    }
+    jar {
+        java {
+            srcDir 'java/src'
+            exclude 'org/klomp/snark/web'
         }
     }
 }
 
 dependencies {
-    compile project(':core')
+    jarCompile project(':core')
+    jarCompile project(':apps:ministreaming')
+    providedCompile sourceSets.jar.output
     providedCompile project(':apps:ministreaming')
     providedCompile project(':apps:jetty')
 }
 
+task i2psnarkJar(type: Jar) {
+    from sourceSets.jar.output
+    manifest {
+        attributes 'Main-Class': 'org.klomp.snark.Snark'
+        attributes 'Class-Path': 'i2p.jar mstreaming.jar streaming.jar'
+    }
+}
+
+artifacts {
+    archives i2psnarkJar
+}
+
 war {
     into '.icons', {
         from 'icons'
diff --git a/apps/i2ptunnel/build.gradle b/apps/i2ptunnel/build.gradle
index 54de8d7f18fc25e8c887c7a54fd52454a9e09d5a..fa266835b3a5ac205c2d24c34b9f0c4e51ed6fe5 100644
--- a/apps/i2ptunnel/build.gradle
+++ b/apps/i2ptunnel/build.gradle
@@ -4,6 +4,15 @@ sourceSets {
     main {
         java {
             srcDir 'java/src'
+            include 'net/i2p/i2ptunnel/web/EditBean.java'
+            include 'net/i2p/i2ptunnel/web/IndexBean.java'
+        }
+    }
+    jar {
+        java {
+            srcDir 'java/src'
+            exclude 'net/i2p/i2ptunnel/web/EditBean.java'
+            exclude 'net/i2p/i2ptunnel/web/IndexBean.java'
         }
     }
     test {
@@ -14,11 +23,24 @@ sourceSets {
 }
 
 dependencies {
-    compile project(':core')
-    providedCompile project(':apps:ministreaming')
+    jarCompile project(':core')
+    jarCompile project(':apps:ministreaming')
+    providedCompile sourceSets.jar.output
     providedCompile project(':apps:jetty')
 }
 
+task i2ptunnelJar(type: Jar) {
+    from sourceSets.jar.output
+    manifest {
+        attributes 'Main-Class': 'net.i2p.i2ptunnel.I2PTunnel'
+        attributes 'Class-Path': 'i2p.jar mstreaming.jar'
+    }
+}
+
+artifacts {
+    archives i2ptunnelJar
+}
+
 war {
     from 'jsp'
     exclude 'jsp/web.xml'