Improve distribution packaging
- filters
- self-contained bin distribution (no ref to libs installed in local maven repo)
diff --git a/build.gradle b/build.gradle
index 674e4a7..b8ddbe2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -57,6 +57,7 @@
     commons_config:     'commons-configuration:commons-configuration:1.6',
     commons_codec:      'commons-codec:commons-codec:1.4',
     commons_coll:       'net.sourceforge.collections:collections-generic:4.01', // Use this lib until the commons collection with Generics is released.
+    commons_io:         'commons-io:commons-io:2.4',
     slf4j:              'org.slf4j:slf4j-api:1.6.1',
     logback_core:       'ch.qos.logback:logback-core:0.9.29',
     logback_classic:    'ch.qos.logback:logback-classic:0.9.29',
@@ -105,6 +106,7 @@
         /* Commons. */
         compile( libraries.commons_config )
         compile( libraries.commons_coll )
+        compile( libraries.commons_io )
 
         /* Misc. */
         compile( libraries.jcip )
@@ -219,6 +221,7 @@
     }
 }
 
+
 task srcDist(dependsOn: ["javadoc"], type: Zip) {
     doFirst {
         platformProjects.collect { project ->
@@ -230,13 +233,18 @@
     baseName=project.ext.archivesBaseName
     destinationDir = project.buildDir
     from (project.rootDir)
-    exclude ('build')
-    exclude ('.project')
-    exclude ('.classpath')
-    exclude ('tmp')
+    exclude ('**/.project')
+    exclude ('**/.classpath')
     exclude ('.rat-excludes')
+    exclude ('**/.gradle/**')
+    exclude ('**/.settings/**')
+    exclude ('**/build/**')
+    exclude ('**/tmp/**')
+    exclude ('**/bin/**')
+    into (baseName+'-'+version+'-'+classifier)
 }
 
+
 task clean << {
     delete buildDir
 }
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
index 97c39a0..3d09186 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/CreateApp.java
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -63,10 +64,15 @@
             new File(appArgs.getAppDir() + "/gradlew").setExecutable(true);
 
             // copy build file contents
-            String buildFileContents = Resources.toString(Resources.getResource("templates/build.gradle"),Charsets.UTF_8);
-            buildFileContents = buildFileContents.replace("<s4_install_dir>", "'"+new File(appArgs.s4ScriptPath).getParent()+"'");
-            Files.write(buildFileContents, new File(
-                    appArgs.getAppDir() + "/build.gradle"), Charsets.UTF_8);
+            String buildFileContents = Resources.toString(Resources.getResource("templates/build.gradle"),
+                    Charsets.UTF_8);
+            buildFileContents = buildFileContents.replace("<s4_install_dir>",
+                    "'" + new File(appArgs.s4ScriptPath).getParent() + "'");
+            Files.write(buildFileContents, new File(appArgs.getAppDir() + "/build.gradle"), Charsets.UTF_8);
+
+            // copy lib
+            FileUtils.copyDirectory(new File(new File(appArgs.s4ScriptPath).getParentFile(), "lib"),
+                    new File(appArgs.getAppDir() + "/lib"));
 
             // update app settings
             String settingsFileContents = Resources.toString(Resources.getResource("templates/settings.gradle"),
diff --git a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
index de56788..ed71fb0 100644
--- a/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
+++ b/subprojects/s4-tools/src/main/java/org/apache/s4/tools/ZKServer.java
@@ -28,6 +28,7 @@
 import org.I0Itec.zkclient.IDefaultNameSpace;
 import org.I0Itec.zkclient.ZkClient;
 import org.I0Itec.zkclient.ZkServer;
+import org.apache.commons.io.FileUtils;
 import org.apache.s4.comm.tools.TaskSetup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,8 +53,8 @@
 
             if (zkArgs.clean) {
                 logger.info("cleaning existing data in [{}] and [{}]", zkArgs.dataDir, zkArgs.logDir);
-                deleteDirectory(new File(zkArgs.dataDir));
-                deleteDirectory(new File(zkArgs.logDir));
+                FileUtils.deleteDirectory(new File(zkArgs.dataDir));
+                FileUtils.deleteDirectory(new File(zkArgs.logDir));
             }
             IDefaultNameSpace defaultNameSpace = new IDefaultNameSpace() {
 
@@ -96,24 +97,6 @@
         }
     }
 
-    static private void deleteDirectory(File path) {
-        if (path.exists()) {
-            File[] files = path.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                if (files[i].isDirectory()) {
-                    deleteDirectory(files[i]);
-                } else {
-                    if (!(files[i].delete())) {
-                        logger.error("Could not delete file {}", files[i].getAbsolutePath());
-                    }
-                }
-            }
-            if (!path.delete()) {
-                logger.error("Could not delete directory {}", path.getAbsolutePath());
-            }
-        }
-    }
-
     @Parameters(commandNames = "s4 zkServer", separators = "=", commandDescription = "Start Zookeeper server")
     static class ZKServerArgs extends S4ArgsBase {