diff --git a/jetty-build-support/pom.xml b/jetty-build-support/pom.xml
index 65da17a..6c35d06 100644
--- a/jetty-build-support/pom.xml
+++ b/jetty-build-support/pom.xml
@@ -13,7 +13,8 @@
   <name>Jetty Toolchain :: Build Support</name>
   <description>Build Support for Jetty (Contains Enforcer Rules, PMD Rulesets, etc ...)</description>
   <properties>
-    <api.version>1.0-beta-1</api.version>
+    <enforcer.version>1.0-beta-1</enforcer.version>
+    <shade.version>2.3</shade.version>
     <maven.version>2.0.9</maven.version>
   </properties>
   <build>
@@ -54,7 +55,12 @@
     <dependency>
       <groupId>org.apache.maven.enforcer</groupId>
       <artifactId>enforcer-api</artifactId>
-      <version>${api.version}</version>
+      <version>${enforcer.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugins</groupId>
+      <artifactId>maven-shade-plugin</artifactId>
+      <version>${shade.version}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
diff --git a/jetty-build-support/src/main/java/org/eclipse/jetty/toolchain/shade/IncludeDirectoryTransformer.java b/jetty-build-support/src/main/java/org/eclipse/jetty/toolchain/shade/IncludeDirectoryTransformer.java
new file mode 100644
index 0000000..2b2830b
--- /dev/null
+++ b/jetty-build-support/src/main/java/org/eclipse/jetty/toolchain/shade/IncludeDirectoryTransformer.java
@@ -0,0 +1,103 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.toolchain.shade;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardOpenOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.apache.maven.plugins.shade.relocation.Relocator;
+import org.apache.maven.plugins.shade.resource.ResourceTransformer;
+import org.codehaus.plexus.util.IOUtil;
+
+/**
+ * Include arbitrary directory in shaded jar
+ */
+public class IncludeDirectoryTransformer implements ResourceTransformer
+{
+    public static boolean DEBUG = false;
+
+    private static class DirectoryCopier extends SimpleFileVisitor<Path>
+    {
+        private final Path basePath;
+        private final JarOutputStream jos;
+
+        public DirectoryCopier(Path basePath, JarOutputStream jos)
+        {
+            this.basePath = basePath;
+            this.jos = jos;
+        }
+
+        @Override
+        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
+        {
+            String entryName = basePath.relativize(file).toString();
+            debug("entryName = %s",entryName);
+            
+            jos.putNextEntry(new JarEntry(entryName));
+            
+            InputStream in = Files.newInputStream(file, StandardOpenOption.READ);
+            IOUtil.copy(in,jos);
+            IOUtil.close(in);
+            
+            return super.visitFile(file,attrs);
+        }
+
+        public void debug(String format, Object... args)
+        {
+            if (DEBUG)
+            {
+                System.err.printf("## " + this.getClass().getSimpleName() + " " + format + "%n",args);
+            }
+        }
+    }
+
+    File directory;
+
+    public boolean canTransformResource(String resource)
+    {
+        return false;
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return directory != null ? directory.exists() : false;
+    }
+
+    public void modifyOutputStream(JarOutputStream jos) throws IOException
+    {
+        // Copy all of the resources in directory to JAR
+        Path basePath = directory.toPath();
+        Files.walkFileTree(basePath,new DirectoryCopier(basePath,jos));
+    }
+
+    public void processResource(String resource, InputStream is, List<Relocator> relocators) throws IOException
+    {
+        // do nothing
+    }
+}
