http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hbase/src/test/resources/streams-plugin-hbase/pom.xml
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hbase/src/test/resources/streams-plugin-hbase/pom.xml
 
b/streams-plugins/streams-plugin-hbase/src/test/resources/streams-plugin-hbase/pom.xml
new file mode 100644
index 0000000..9aa7d8d
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-hbase/src/test/resources/streams-plugin-hbase/pom.xml
@@ -0,0 +1,76 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.streams.plugins</groupId>
+    <artifactId>streams-plugin-hbase-test</artifactId>
+    <version>0.3-incubating-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <name>Test StreamsHbaseResourceGeneratorMojo</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.streams.plugins</groupId>
+                <artifactId>streams-plugin-hbase</artifactId>
+                <version>0.3-incubating-SNAPSHOT</version>
+                <configuration>
+                    <sourcePaths>
+                        
<sourcePath>target/test-classes/streams-schemas/activity.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/collection.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/media_link.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/object.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/objectTypes</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/verbs</sourcePath>
+                    </sourcePaths>
+                    
<targetDirectory>target/generated-resources/test-mojo</targetDirectory>
+                    <columnFamily>cf</columnFamily>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>hbase</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.10</version>
+                <configuration>
+                    <includes>**/*.json</includes>
+                    
<outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                    <includeGroupIds>org.apache.streams</includeGroupIds>
+                    <includeArtifactIds>streams-schemas</includeArtifactIds>
+                    <includeTypes>jar,test-jar</includeTypes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>unpack-schemas</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/pom.xml 
b/streams-plugins/streams-plugin-hive/pom.xml
index b173a8d..515314a 100644
--- a/streams-plugins/streams-plugin-hive/pom.xml
+++ b/streams-plugins/streams-plugin-hive/pom.xml
@@ -148,6 +148,12 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-verifier</artifactId>
+            <version>1.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGenerator.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGenerator.java
 
b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGenerator.java
index 06c1499..c09f7dd 100644
--- 
a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGenerator.java
+++ 
b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGenerator.java
@@ -46,12 +46,11 @@ public class StreamsHiveResourceGenerator implements 
Runnable {
 
     private int currentDepth = 0;
 
-    public void main(String[] args) {
+    public static void main(String[] args) {
         StreamsHiveGenerationConfig config = new StreamsHiveGenerationConfig();
 
-        String sourceDirectory = "./target/test-classes/activities";
-        String targetDirectory = 
"./target/generated-sources/streams-plugin-hive";
-        String targetPackage = "";
+        String sourceDirectory = "src/main/jsonschema";
+        String targetDirectory = "target/generated-resources/hive";
 
         if( args.length > 0 )
             sourceDirectory = args[0];

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGeneratorMojo.java
 
b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGeneratorMojo.java
index 9cf71a9..16466cf 100644
--- 
a/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGeneratorMojo.java
+++ 
b/streams-plugins/streams-plugin-hive/src/main/java/org/apache/streams/plugins/hive/StreamsHiveResourceGeneratorMojo.java
@@ -2,6 +2,7 @@ package org.apache.streams.plugins.hive;
 
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Execute;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -15,15 +16,17 @@ import java.io.File;
 import java.util.List;
 
 @Mojo(  name = "hive",
-        defaultPhase = LifecyclePhase.GENERATE_SOURCES
+        defaultPhase = LifecyclePhase.GENERATE_RESOURCES
 )
 @Execute(   goal = "hive",
-            phase = LifecyclePhase.GENERATE_SOURCES
+            phase = LifecyclePhase.GENERATE_RESOURCES
 )
 public class StreamsHiveResourceGeneratorMojo extends AbstractMojo {
 
     private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsHiveResourceGeneratorMojo.class);
 
+    private volatile MojoFailureException mojoFailureException;
+
     @Component
     private MavenProject project;
 
@@ -39,16 +42,16 @@ public class StreamsHiveResourceGeneratorMojo extends 
AbstractMojo {
     @Parameter( defaultValue = "${project.basedir}", readonly = true )
     private File basedir;
 
-    @Parameter( defaultValue = "./src/main/jsonschema", readonly = true ) // 
Maven 3 only
+    @Parameter( defaultValue = "src/main/jsonschema", readonly = true ) // 
Maven 3 only
     public String sourceDirectory;
 
     @Parameter( readonly = true ) // Maven 3 only
     public List<String> sourcePaths;
 
-    @Parameter(defaultValue = 
"./target/generated-sources/streams-plugin-hive", readonly = true)
+    @Parameter(defaultValue = "./target/generated-resources/hive", readonly = 
true)
     public String targetDirectory;
 
-    public void execute() throws MojoExecutionException {
+    public void execute() throws MojoExecutionException, MojoFailureException {
 
         //addProjectDependenciesToClasspath();
 
@@ -60,16 +63,30 @@ public class StreamsHiveResourceGeneratorMojo extends 
AbstractMojo {
             config.setSourceDirectory(sourceDirectory);
         config.setTargetDirectory(targetDirectory);
 
-        StreamsHiveResourceGenerator streamsPojoScala = new 
StreamsHiveResourceGenerator(config);
-        Thread thread = new Thread(streamsPojoScala);
-        thread.start();
+        StreamsHiveResourceGenerator streamsHiveResourceGenerator = new 
StreamsHiveResourceGenerator(config);
+
+        Thread.UncaughtExceptionHandler h = new 
Thread.UncaughtExceptionHandler() {
+            public void uncaughtException(Thread th, Throwable ex) {
+                LOGGER.error("Exception", ex);
+                mojoFailureException = new MojoFailureException("Exception", 
ex);
+            }
+        };
+        Thread.setDefaultUncaughtExceptionHandler(h);
+        Thread thread = new Thread(streamsHiveResourceGenerator);
+        thread.setUncaughtExceptionHandler(h);
         try {
+            thread.start();
             thread.join();
         } catch (InterruptedException e) {
             LOGGER.error("InterruptedException", e);
         } catch (Exception e) {
             LOGGER.error("Exception", e);
+            mojoFailureException = new MojoFailureException("Exception", e);
         }
+
+        if( mojoFailureException != null )
+            throw mojoFailureException;
+
         return;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-hive/src/site/markdown/index.md 
b/streams-plugins/streams-plugin-hive/src/site/markdown/index.md
new file mode 100644
index 0000000..4df9103
--- /dev/null
+++ b/streams-plugins/streams-plugin-hive/src/site/markdown/index.md
@@ -0,0 +1,22 @@
+org.apache.streams.plugins:streams-plugin-hive
+==============================================
+
+streams-plugin-hive generates resources from json schemas to assist with 
analysis of json data using Apache Hive.
+
+#### Usage
+
+Run within a module containing a src/main/jsonschema directory
+
+    mvn 
org.apache.streams.plugins:streams-plugin-hive:0.3-incubating-SNAPSHOT:hive
+
+Output will be placed in target/generated-resources/hive by default
+
+#### Example
+
+[streams-plugin-hive/pom.xml](streams-plugin-hive/pom.xml 
"streams-plugin-hive/pom.xml")
+
+#### Documentation
+
+[JavaDocs](apidocs/index.html "JavaDocs")
+
+###### Licensed under Apache License 2.0 - 
http://www.apache.org/licenses/LICENSE-2.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorCLITest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorCLITest.java
 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorCLITest.java
new file mode 100644
index 0000000..21c82f9
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorCLITest.java
@@ -0,0 +1,41 @@
+package org.apache.streams.plugins.test;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import org.apache.streams.plugins.hive.StreamsHiveResourceGenerator;
+import org.junit.Test;
+
+import javax.annotation.Nullable;
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+import static 
org.apache.streams.plugins.test.StreamsHiveResourceGeneratorTest.hqlFilter;
+
+/**
+ * Created by sblackmon on 5/5/16.
+ */
+public class StreamsHiveResourceGeneratorCLITest {
+
+    @Test
+    public void testStreamsHiveResourceGeneratorCLI() throws Exception {
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+        String targetDirectory = "target/generated-resources/hive-cli";
+
+        List<String> argsList = Lists.newArrayList(sourceDirectory, 
targetDirectory);
+        StreamsHiveResourceGenerator.main(argsList.toArray(new String[0]));
+
+        File testOutput = new File(targetDirectory);
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(hqlFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 133 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorMojoTest.java
 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorMojoTest.java
new file mode 100644
index 0000000..b2f3e14
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorMojoTest.java
@@ -0,0 +1,64 @@
+package org.apache.streams.plugins.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import junit.framework.TestCase;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static 
org.apache.streams.plugins.test.StreamsHiveResourceGeneratorTest.hqlFilter;
+
+/**
+ * Tests that streams-plugin-hive running via maven generates hql resources
+ */
+public class StreamsHiveResourceGeneratorMojoTest extends TestCase {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsHiveResourceGeneratorMojoTest.class);
+
+    protected void setUp() throws Exception
+    {
+        // required for mojo lookups to work
+        super.setUp();
+    }
+
+
+    @Test
+    public void testStreamsHiveResourceGeneratorMojo() throws Exception {
+
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), 
"/streams-plugin-hive" );
+
+        Verifier verifier;
+
+        verifier = new Verifier( testDir.getAbsolutePath() );
+
+        List cliOptions = new ArrayList();
+        cliOptions.add( "-N" );
+        verifier.executeGoals( Lists.<String>newArrayList(
+                "clean",
+                "dependency:unpack-dependencies",
+                "generate-resources"));
+
+        verifier.verifyErrorFreeLog();
+
+        verifier.resetStreams();
+
+        File testOutput = new File(testDir.getAbsolutePath() + 
"/target/generated-resources/test-mojo");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(hqlFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 133 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
index 9be908d..3944ddf 100644
--- 
a/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
+++ 
b/streams-plugins/streams-plugin-hive/src/test/java/org/apache/streams/plugins/test/StreamsHiveResourceGeneratorTest.java
@@ -8,6 +8,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.streams.plugins.hive.StreamsHiveGenerationConfig;
 import org.apache.streams.plugins.hive.StreamsHiveResourceGenerator;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,10 +23,20 @@ import static 
org.apache.streams.schema.FileUtil.dropSourcePathPrefix;
 /**
  * Test that Activity beans are compatible with the example activities in the 
spec.
  */
+@Ignore
 public class StreamsHiveResourceGeneratorTest {
 
     private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsHiveResourceGeneratorTest.class);
 
+    public static final Predicate<File> hqlFilter = new Predicate<File>() {
+        @Override
+        public boolean apply(@Nullable File file) {
+            if( file.getName().endsWith(".hql") )
+                return true;
+            else return false;
+        }
+    };
+
     /**
      * Tests that all example activities can be loaded into Activity beans
      *
@@ -57,15 +68,7 @@ public class StreamsHiveResourceGeneratorTest {
             LOGGER.error("Exception", e);
         }
 
-        File testOutput = new File( "./target/generated-sources/test");
-        Predicate<File> hqlFilter = new Predicate<File>() {
-            @Override
-            public boolean apply(@Nullable File file) {
-                if( file.getName().endsWith(".hql") )
-                    return true;
-                else return false;
-            }
-        };
+        File testOutput = config.getTargetDirectory();
 
         assert( testOutput != null );
         assert( testOutput.exists() == true );

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-hive/src/test/resources/streams-plugin-hive/pom.xml
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-hive/src/test/resources/streams-plugin-hive/pom.xml
 
b/streams-plugins/streams-plugin-hive/src/test/resources/streams-plugin-hive/pom.xml
index b1de7b8..ae4bb66 100644
--- 
a/streams-plugins/streams-plugin-hive/src/test/resources/streams-plugin-hive/pom.xml
+++ 
b/streams-plugins/streams-plugin-hive/src/test/resources/streams-plugin-hive/pom.xml
@@ -13,6 +13,13 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
@@ -24,10 +31,15 @@
                 <artifactId>streams-plugin-hive</artifactId>
                 <version>0.3-incubating-SNAPSHOT</version>
                 <configuration>
-                    <packages>
-                        <package>org.apache.streams.pojo.json</package>
-                    </packages>
-                    <target>target/test-classes/streams-hive-plugin/</target>
+                    <sourcePaths>
+                        
<sourcePath>target/test-classes/streams-schemas/activity.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/collection.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/media_link.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/object.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/objectTypes</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/verbs</sourcePath>
+                    </sourcePaths>
+                    
<targetDirectory>target/generated-resources/test-mojo</targetDirectory>
                 </configuration>
                 <executions>
                     <execution>
@@ -37,6 +49,27 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.10</version>
+                <configuration>
+                    <includes>**/*.json</includes>
+                    
<outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                    <includeGroupIds>org.apache.streams</includeGroupIds>
+                    <includeArtifactIds>streams-schemas</includeArtifactIds>
+                    <includeTypes>jar,test-jar</includeTypes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>unpack-schemas</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pig/pom.xml 
b/streams-plugins/streams-plugin-pig/pom.xml
new file mode 100644
index 0000000..ef59587
--- /dev/null
+++ b/streams-plugins/streams-plugin-pig/pom.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.streams.plugins</groupId>
+    <artifactId>streams-plugin-pig</artifactId>
+    <version>0.3-incubating-SNAPSHOT</version>
+    <packaging>maven-plugin</packaging>
+
+    <parent>
+        <groupId>org.apache.streams</groupId>
+        <artifactId>streams-plugins</artifactId>
+        <version>0.3-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <properties>
+        <pig.version>1.0</pig.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-config</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-aether-provider</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-artifact</artifactId>
+            <version>3.3.3</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-compat</artifactId>
+            <version>3.3.3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+            <version>3.3.3</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.sonatype.aether</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-verifier</artifactId>
+            <version>1.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-resources-plugin</artifactId>
+            <version>2.7</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.maven</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-utils</artifactId>
+            <version>3.0.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-plugin-plugin</artifactId>
+            <version>3.4</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-tools-api</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-annotations</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-tools-generators</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-testing</groupId>
+            <artifactId>maven-plugin-testing-harness</artifactId>
+            <version>3.3.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.joda</groupId>
+            <artifactId>joda-convert</artifactId>
+            <version>1.8.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <testSourceDirectory>src/test/java</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <version>3.4</version>
+                <configuration>
+                    
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>mojo-descriptor</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>descriptor</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.reflections</groupId>
+                <artifactId>reflections-maven</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>reflections</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.4</version>
+                <executions>
+                    <execution>
+                        <id>resource-dependencies</id>
+                        <phase>process-test-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            
<includeGroupIds>org.apache.streams</includeGroupIds>
+                            
<includeArtifactIds>streams-schemas</includeArtifactIds>
+                            <includes>**/*.json</includes>
+                            
<outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigGenerationConfig.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigGenerationConfig.java
 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigGenerationConfig.java
new file mode 100644
index 0000000..5aa55ed
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigGenerationConfig.java
@@ -0,0 +1,84 @@
+package org.apache.streams.plugins.pig;
+
+import org.apache.streams.schema.GenerationConfig;
+import org.jsonschema2pojo.DefaultGenerationConfig;
+import org.jsonschema2pojo.util.URLUtil;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Configures StreamsHiveResourceGenerator
+ *
+ *
+ */
+public class StreamsPigGenerationConfig extends DefaultGenerationConfig 
implements GenerationConfig {
+
+    public String getSourceDirectory() {
+        return sourceDirectory;
+    }
+
+    public List<String> getSourcePaths() {
+        return sourcePaths;
+    }
+
+    private String sourceDirectory;
+    private List<String> sourcePaths = new ArrayList<String>();
+    private String targetDirectory;
+    private int maxDepth = 1;
+
+    public Set<String> getExclusions() {
+        return exclusions;
+    }
+
+    public void setExclusions(Set<String> exclusions) {
+        this.exclusions = exclusions;
+    }
+
+    private Set<String> exclusions = new HashSet<String>();
+
+    public int getMaxDepth() {
+        return maxDepth;
+    }
+
+    public void setSourceDirectory(String sourceDirectory) {
+        this.sourceDirectory = sourceDirectory;
+    }
+
+    public void setSourcePaths(List<String> sourcePaths) {
+        this.sourcePaths = sourcePaths;
+    }
+
+    public void setTargetDirectory(String targetDirectory) {
+        this.targetDirectory = targetDirectory;
+    }
+
+    @Override
+    public File getTargetDirectory() {
+        return new File(targetDirectory);
+    }
+
+    @Override
+    public Iterator<URL> getSource() {
+        if (null != sourceDirectory) {
+            return 
Collections.singleton(URLUtil.parseURL(sourceDirectory)).iterator();
+        }
+        List<URL> sourceURLs = new ArrayList<URL>();
+        if( sourcePaths != null && sourcePaths.size() > 0)
+            for (String source : sourcePaths) {
+                sourceURLs.add(URLUtil.parseURL(source));
+            }
+        return sourceURLs.iterator();
+    }
+
+    public void setMaxDepth(int maxDepth) {
+        this.maxDepth = maxDepth;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGenerator.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGenerator.java
 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGenerator.java
new file mode 100644
index 0000000..072e1b6
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGenerator.java
@@ -0,0 +1,317 @@
+package org.apache.streams.plugins.pig;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import org.apache.streams.plugins.pig.StreamsPigGenerationConfig;
+import org.apache.streams.schema.FieldType;
+import org.apache.streams.schema.FieldUtil;
+import org.apache.streams.schema.FileUtil;
+import org.apache.streams.schema.GenerationConfig;
+import org.apache.streams.schema.Schema;
+import org.apache.streams.schema.SchemaStore;
+import org.jsonschema2pojo.util.URLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.streams.schema.FileUtil.dropExtension;
+import static org.apache.streams.schema.FileUtil.dropSourcePathPrefix;
+import static org.apache.streams.schema.FileUtil.swapExtension;
+import static org.apache.streams.schema.FileUtil.writeFile;
+
+public class StreamsPigResourceGenerator implements Runnable {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPigResourceGenerator.class);
+
+    private final static String LS = System.getProperty("line.separator");
+
+    private StreamsPigGenerationConfig config;
+
+    private SchemaStore schemaStore = new SchemaStore();
+
+    private int currentDepth = 0;
+
+    public static void main(String[] args) {
+        StreamsPigGenerationConfig config = new StreamsPigGenerationConfig();
+
+        String sourceDirectory = "src/main/jsonschema";
+        String targetDirectory = "target/generated-resources/pig-cli";
+
+        if (args.length > 0)
+            sourceDirectory = args[0];
+        if (args.length > 1)
+            targetDirectory = args[1];
+
+        config.setSourceDirectory(sourceDirectory);
+        config.setTargetDirectory(targetDirectory);
+
+        StreamsPigResourceGenerator streamsPigResourceGenerator = new 
StreamsPigResourceGenerator(config);
+        Thread thread = new Thread(streamsPigResourceGenerator);
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+        }
+        return;
+    }
+
+    public StreamsPigResourceGenerator(StreamsPigGenerationConfig config) {
+        this.config = config;
+    }
+
+    public void run() {
+
+        checkNotNull(config);
+
+        generate(config);
+
+    }
+
+    public void generate(StreamsPigGenerationConfig config) {
+
+        LinkedList<File> sourceFiles = new LinkedList<File>();
+
+        for (Iterator<URL> sources = config.getSource(); sources.hasNext(); ) {
+            URL source = sources.next();
+            sourceFiles.add(URLUtil.getFileFromURL(source));
+        }
+
+        LOGGER.info("Seeded with {} source paths:", sourceFiles.size());
+
+        FileUtil.resolveRecursive((GenerationConfig) config, sourceFiles);
+
+        LOGGER.info("Resolved {} schema files:", sourceFiles.size());
+
+        for (Iterator<File> iterator = sourceFiles.iterator(); 
iterator.hasNext(); ) {
+            File item = iterator.next();
+            schemaStore.create(item.toURI());
+        }
+
+        LOGGER.info("Identified {} objects:", schemaStore.getSize());
+
+        for (Iterator<Schema> schemaIterator = 
schemaStore.getSchemaIterator(); schemaIterator.hasNext(); ) {
+            Schema schema = schemaIterator.next();
+            currentDepth = 0;
+            if (schema.getURI().getScheme().equals("file")) {
+                String inputFile = schema.getURI().getPath();
+                String resourcePath = dropSourcePathPrefix(inputFile, 
config.getSourceDirectory());
+                for (String sourcePath : config.getSourcePaths()) {
+                    resourcePath = dropSourcePathPrefix(resourcePath, 
sourcePath);
+                }
+                String outputFile = config.getTargetDirectory() + "/" + 
swapExtension(resourcePath, "json", "pig");
+
+                LOGGER.info("Processing {}:", resourcePath);
+
+                String resourceId = schemaSymbol(schema);
+
+                String resourceContent = generateResource(schema, resourceId);
+
+                writeFile(outputFile, resourceContent);
+
+                LOGGER.info("Wrote {}:", outputFile);
+            }
+        }
+    }
+
+    public String generateResource(Schema schema, String resourceId) {
+        StringBuilder resourceBuilder = new StringBuilder();
+        resourceBuilder.append(pigEscape(resourceId));
+        resourceBuilder.append(" = ");
+        resourceBuilder.append("LOAD '' USING JsonLoader('");
+        resourceBuilder = appendRootObject(resourceBuilder, schema, 
resourceId, ':');
+        resourceBuilder.append("');");
+        return resourceBuilder.toString();
+    }
+
+    public StringBuilder appendRootObject(StringBuilder builder, Schema 
schema, String resourceId, Character seperator) {
+        ObjectNode propertiesNode = schemaStore.resolveProperties(schema, 
null, resourceId);
+        if (propertiesNode != null && propertiesNode.isObject() && 
propertiesNode.size() > 0) {
+            builder = appendPropertiesNode(builder, schema, propertiesNode, 
seperator);
+        }
+        return builder;
+    }
+
+    private StringBuilder appendPropertiesNode(StringBuilder builder, Schema 
schema, ObjectNode propertiesNode, Character seperator) {
+        checkNotNull(builder);
+        checkNotNull(propertiesNode);
+        Iterator<Map.Entry<String, JsonNode>> fields = propertiesNode.fields();
+        Joiner joiner = Joiner.on(", ").skipNulls();
+        List<String> fieldStrings = Lists.newArrayList();
+        for( ; fields.hasNext(); ) {
+            Map.Entry<String, JsonNode> field = fields.next();
+            String fieldId = field.getKey();
+            if( !config.getExclusions().contains(fieldId) && 
field.getValue().isObject()) {
+                ObjectNode fieldNode = (ObjectNode) field.getValue();
+                FieldType fieldType = FieldUtil.determineFieldType(fieldNode);
+                if (fieldType != null ) {
+                    switch (fieldType) {
+                        case ARRAY:
+                            ObjectNode itemsNode = 
FieldUtil.resolveItemsNode(fieldNode);
+                            if( itemsNode == null ) {
+                                ObjectNode resolvedItems = 
schemaStore.resolveProperties(schema, fieldNode, fieldId);
+                                itemsNode = FieldUtil.resolveItemsNode();
+                            }
+                            if( itemsNode != null && currentDepth <= 
config.getMaxDepth()) {
+                                StringBuilder arrayItemsBuilder = 
appendArrayItems(new StringBuilder(), schema, fieldId, itemsNode, seperator);
+                                if( 
!Strings.isNullOrEmpty(arrayItemsBuilder.toString())) {
+                                    
fieldStrings.add(arrayItemsBuilder.toString());
+                                }
+                            }
+                            break;
+                        case OBJECT:
+                            ObjectNode childProperties = 
schemaStore.resolveProperties(schema, fieldNode, fieldId);
+                            if( currentDepth < config.getMaxDepth()) {
+                                StringBuilder structFieldBuilder = 
appendStructField(new StringBuilder(), schema, fieldId, childProperties, 
seperator);
+                                if( 
!Strings.isNullOrEmpty(structFieldBuilder.toString())) {
+                                    
fieldStrings.add(structFieldBuilder.toString());
+                                }
+                            }
+                            break;
+                        default:
+                            StringBuilder valueFieldBuilder = 
appendValueField(new StringBuilder(), schema, fieldId, fieldType, seperator);
+                            if( 
!Strings.isNullOrEmpty(valueFieldBuilder.toString())) {
+                                fieldStrings.add(valueFieldBuilder.toString());
+                            }
+                    }
+                }
+            }
+        }
+        joiner.appendTo(builder, fieldStrings);
+        Preconditions.checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendValueField(StringBuilder builder, Schema 
schema, String fieldId, FieldType fieldType, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        builder.append(pigEscape(fieldId));
+        builder.append(seperator);
+        builder.append(pigType(fieldType));
+        return builder;
+    }
+
+    public StringBuilder appendArrayItems(StringBuilder builder, Schema 
schema, String fieldId, ObjectNode itemsNode, Character seperator) {
+        // not safe to append nothing
+        checkNotNull(builder);
+        if( itemsNode == null ) return builder;
+        FieldType itemType = FieldUtil.determineFieldType(itemsNode);
+        try {
+            switch( itemType ) {
+                case OBJECT:
+                    builder = appendArrayObject(builder, schema, fieldId, 
itemsNode, seperator);
+                    break;
+                case ARRAY:
+                    ObjectNode subArrayItems = (ObjectNode) 
itemsNode.get("items");
+                    builder = appendArrayItems(builder, schema, fieldId, 
subArrayItems, seperator);
+                    break;
+                default:
+                    builder = appendArrayField(builder, schema, fieldId, 
itemType, seperator);
+            }
+        } catch (Exception e) {
+            LOGGER.warn("No item type resolvable for {}", fieldId);
+        }
+
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendArrayField(StringBuilder builder, Schema 
schema, String fieldId, FieldType fieldType, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        checkNotNull(fieldId);
+        builder.append("{t: (");
+        builder.append(pigEscape(fieldId));
+        builder.append(seperator);
+        builder.append(pigType(fieldType));
+        builder.append(")}");
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendArrayObject(StringBuilder builder, Schema 
schema, String fieldId, ObjectNode fieldNode, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        checkNotNull(fieldId);
+        checkNotNull(fieldNode);
+        ObjectNode propertiesNode = schemaStore.resolveProperties(schema, 
fieldNode, fieldId);
+        if( propertiesNode.size() > 0 ) {
+            builder.append("{t: (");
+            builder = appendStructField(builder, schema, "", propertiesNode, 
':');
+            builder.append(")}");
+        }
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendStructField(StringBuilder builder, Schema 
schema, String fieldId, ObjectNode propertiesNode, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        checkNotNull(propertiesNode);
+
+        if( propertiesNode != null && propertiesNode.isObject() && 
propertiesNode.size() > 0 ) {
+
+            currentDepth += 1;
+
+            if( !Strings.isNullOrEmpty(fieldId)) {
+                builder.append(pigEscape(fieldId));
+                builder.append(seperator);
+                builder.append("(");
+                builder = appendPropertiesNode(builder, schema, 
propertiesNode, ':');
+                builder.append(")");
+            }
+
+            currentDepth -= 1;
+
+        }
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private static String pigEscape( String fieldId ) {
+        return fieldId;
+    }
+
+    private static String pigType( FieldType fieldType ) {
+        switch( fieldType ) {
+            case STRING:
+                return "chararray";
+            case INTEGER:
+                return "int";
+            case NUMBER:
+                return "double";
+            case OBJECT:
+                return "tuple";
+            default:
+                return fieldType.name().toLowerCase();
+        }
+    }
+
+    private String schemaSymbol( Schema schema ) {
+        if (schema == null) return null;
+        // this needs to return whatever
+        if (schema.getURI().getScheme().equals("file")) {
+            String inputFile = schema.getURI().getPath();
+            String resourcePath = dropSourcePathPrefix(inputFile, 
config.getSourceDirectory());
+            for (String sourcePath : config.getSourcePaths()) {
+                resourcePath = dropSourcePathPrefix(resourcePath, sourcePath);
+            }
+            return dropExtension(resourcePath).replace("/", "_").replace("-", 
"");
+        } else {
+            return "IDK";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGeneratorMojo.java
 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGeneratorMojo.java
new file mode 100644
index 0000000..4763b60
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/main/java/org/apache/streams/plugins/pig/StreamsPigResourceGeneratorMojo.java
@@ -0,0 +1,93 @@
+package org.apache.streams.plugins.pig;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.List;
+
+@Mojo(  name = "pig",
+        defaultPhase = LifecyclePhase.GENERATE_RESOURCES
+)
+@Execute(   goal = "pig",
+            phase = LifecyclePhase.GENERATE_RESOURCES
+)
+public class StreamsPigResourceGeneratorMojo extends AbstractMojo {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPigResourceGeneratorMojo.class);
+
+    private volatile MojoFailureException mojoFailureException;
+
+    @Component
+    private MavenProject project;
+
+//    @Component
+//    private Settings settings;
+//
+//    @Parameter( defaultValue = "${localRepository}", readonly = true, 
required = true )
+//    protected ArtifactRepository localRepository;
+//
+//    @Parameter( defaultValue = "${plugin}", readonly = true ) // Maven 3 only
+//    private PluginDescriptor plugin;
+//
+    @Parameter( defaultValue = "${project.basedir}", readonly = true )
+    private File basedir;
+
+    @Parameter( defaultValue = "src/main/jsonschema", readonly = true ) // 
Maven 3 only
+    public String sourceDirectory;
+
+    @Parameter( readonly = true ) // Maven 3 only
+    public List<String> sourcePaths;
+
+    @Parameter(defaultValue = "target/generated-resources/pig", readonly = 
true)
+    public String targetDirectory;
+
+    public void execute() throws MojoExecutionException, MojoFailureException {
+
+        //addProjectDependenciesToClasspath();
+
+        StreamsPigGenerationConfig config = new StreamsPigGenerationConfig();
+
+        if( sourcePaths != null && sourcePaths.size() > 0)
+            config.setSourcePaths(sourcePaths);
+        else
+            config.setSourceDirectory(sourceDirectory);
+        config.setTargetDirectory(targetDirectory);
+
+        StreamsPigResourceGenerator streamsPigResourceGenerator = new 
StreamsPigResourceGenerator(config);
+
+        Thread.UncaughtExceptionHandler h = new 
Thread.UncaughtExceptionHandler() {
+            public void uncaughtException(Thread th, Throwable ex) {
+                LOGGER.error("Exception", ex);
+                mojoFailureException = new MojoFailureException("Exception", 
ex);
+            }
+        };
+        Thread.setDefaultUncaughtExceptionHandler(h);
+        Thread thread = new Thread(streamsPigResourceGenerator);
+        thread.setUncaughtExceptionHandler(h);
+        try {
+            thread.start();
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+            mojoFailureException = new MojoFailureException("Exception", e);
+        }
+
+        if( mojoFailureException != null )
+            throw mojoFailureException;
+
+        return;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pig/src/site/markdown/index.md 
b/streams-plugins/streams-plugin-pig/src/site/markdown/index.md
new file mode 100644
index 0000000..d0d4791
--- /dev/null
+++ b/streams-plugins/streams-plugin-pig/src/site/markdown/index.md
@@ -0,0 +1,22 @@
+org.apache.streams.plugins:streams-plugin-pig
+=============================================
+
+streams-plugin-pig generates resources from json schemas to assist with 
analysis of json data using Apache Pig.
+
+#### Usage
+
+Run within a module containing a src/main/jsonschema directory
+
+    mvn 
org.apache.streams.plugins:streams-plugin-pig:0.3-incubating-SNAPSHOT:pig
+
+Output will be placed in target/generated-resources/pig by default
+
+#### Example
+
+[streams-plugin-pig/pom.xml](streams-plugin-pig/pom.xml 
"streams-plugin-pig/pom.xml")
+
+#### Documentation
+
+[JavaDocs](apidocs/index.html "JavaDocs")
+
+###### Licensed under Apache License 2.0 - 
http://www.apache.org/licenses/LICENSE-2.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorCLITest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorCLITest.java
 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorCLITest.java
new file mode 100644
index 0000000..c94bca9
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorCLITest.java
@@ -0,0 +1,39 @@
+package org.apache.streams.plugins.pig.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import org.apache.streams.plugins.pig.StreamsPigResourceGenerator;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+import static 
org.apache.streams.plugins.pig.test.StreamsPigResourceGeneratorTest.pigFilter;
+
+/**
+ * Created by sblackmon on 5/5/16.
+ */
+public class StreamsPigResourceGeneratorCLITest {
+
+    @Test
+    public void testStreamsPigResourceGeneratorCLI() throws Exception {
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+        String targetDirectory = "target/generated-resources/hive-cli";
+
+        List<String> argsList = Lists.newArrayList(sourceDirectory, 
targetDirectory);
+        StreamsPigResourceGenerator.main(argsList.toArray(new String[0]));
+
+        File testOutput = new File(targetDirectory);
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(pigFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 133 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorMojoTest.java
 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorMojoTest.java
new file mode 100644
index 0000000..401c506
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorMojoTest.java
@@ -0,0 +1,64 @@
+package org.apache.streams.plugins.pig.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import junit.framework.TestCase;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static 
org.apache.streams.plugins.pig.test.StreamsPigResourceGeneratorTest.pigFilter;
+
+/**
+ * Tests that streams-plugin-hive running via maven generates hql resources
+ */
+public class StreamsPigResourceGeneratorMojoTest extends TestCase {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPigResourceGeneratorMojoTest.class);
+
+    protected void setUp() throws Exception
+    {
+        // required for mojo lookups to work
+        super.setUp();
+    }
+
+
+    @Test
+    public void testStreamsHiveResourceGeneratorMojo() throws Exception {
+
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), 
"/streams-plugin-pig" );
+
+        Verifier verifier;
+
+        verifier = new Verifier( testDir.getAbsolutePath() );
+
+        List cliOptions = new ArrayList();
+        cliOptions.add( "-N" );
+        verifier.executeGoals( Lists.<String>newArrayList(
+                "clean",
+                "dependency:unpack-dependencies",
+                "generate-resources"));
+
+        verifier.verifyErrorFreeLog();
+
+        verifier.resetStreams();
+
+        File testOutput = new File(testDir.getAbsolutePath() + 
"/target/generated-resources/test-mojo");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(pigFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 133 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorTest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorTest.java
 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorTest.java
new file mode 100644
index 0000000..a1ab281
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/java/org/apache/streams/plugins/pig/test/StreamsPigResourceGeneratorTest.java
@@ -0,0 +1,122 @@
+package org.apache.streams.plugins.pig.test;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
+import org.apache.streams.plugins.pig.StreamsPigGenerationConfig;
+import org.apache.streams.plugins.pig.StreamsPigResourceGenerator;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nullable;
+import java.io.File;
+import java.util.Collection;
+import java.util.Iterator;
+
+import static org.apache.streams.schema.FileUtil.dropSourcePathPrefix;
+
+/**
+ * Test that Activity beans are compatible with the example activities in the 
spec.
+ */
+public class StreamsPigResourceGeneratorTest {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPigResourceGeneratorTest.class);
+
+    public static final Predicate<File> pigFilter = new Predicate<File>() {
+        @Override
+        public boolean apply(@Nullable File file) {
+            if( file.getName().endsWith(".pig") )
+                return true;
+            else return false;
+        }
+    };
+
+    /**
+     * Tests that all example activities can be loaded into Activity beans
+     *
+     * @throws Exception
+     */
+    @Test
+    public void StreamsPigResourceGenerator() throws Exception {
+
+        StreamsPigGenerationConfig config = new StreamsPigGenerationConfig();
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+
+        config.setSourceDirectory(sourceDirectory);
+
+        config.setTargetDirectory("target/generated-sources/test");
+
+        config.setExclusions(Sets.newHashSet("attachments"));
+
+        config.setMaxDepth(2);
+
+        StreamsPigResourceGenerator streamsPigResourceGenerator = new 
StreamsPigResourceGenerator(config);
+        Thread thread = new Thread(streamsPigResourceGenerator);
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+        }
+
+        File testOutput = new File( "./target/generated-sources/test");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(pigFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 133 );
+
+        String expectedDirectory = "target/test-classes/expected";
+        File testExpected = new File( expectedDirectory );
+
+        Iterable<File> expectedIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testExpected)
+                .filter(pigFilter);
+        Collection<File> expectedCollection = 
Lists.newArrayList(expectedIterator);
+
+        int fails = 0;
+
+        Iterator<File> iterator = expectedCollection.iterator();
+        while( iterator.hasNext() ) {
+            File objectExpected = iterator.next();
+            String expectedEnd = 
dropSourcePathPrefix(objectExpected.getAbsolutePath(),  expectedDirectory);
+            File objectActual = new File(config.getTargetDirectory() + "/" + 
expectedEnd);
+            LOGGER.info("Comparing: {} and {}", 
objectExpected.getAbsolutePath(), objectActual.getAbsolutePath());
+            assert( objectActual.exists());
+            if( FileUtils.contentEquals(objectActual, objectExpected) == true 
) {
+                LOGGER.info("Exact Match!");
+            } else {
+                LOGGER.info("No Match!");
+                fails++;
+            }
+        }
+        if( fails > 0 ) {
+            LOGGER.info("Fails: {}", fails);
+            Assert.fail();
+        }
+
+
+//        assert( new File(testOutput + "/traits").exists() == true );
+//        assert( new File(testOutput + "/traits").isDirectory() == true );
+//        assert( new File(testOutput + "/traits").listFiles(scalaFilter) != 
null );
+//        assert( new File(testOutput + 
"/traits").listFiles(scalaFilter).length == 4 );
+//        assert( new File(testOutput + "/objectTypes").exists() == true );
+//        assert( new File(testOutput + "/objectTypes").isDirectory() == true 
);
+//        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter) 
!= null );
+//        assert( new File(testOutput + 
"/objectTypes").listFiles(scalaFilter).length == 43 );
+//        assert( new File(testOutput + "/verbs").exists() == true );
+//        assert( new File(testOutput + "/verbs").isDirectory() == true );
+//        assert( new File(testOutput + "/verbs").listFiles(scalaFilter) != 
null );
+//        assert( new File(testOutput + 
"/verbs").listFiles(scalaFilter).length == 89 );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/resources/expected/media_link.pig
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/resources/expected/media_link.pig 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/media_link.pig
new file mode 100644
index 0000000..643686e
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/media_link.pig
@@ -0,0 +1 @@
+media_link = LOAD '' USING JsonLoader('duration:double, height:int, width:int, 
url:chararray');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/file.pig
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/file.pig
 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/file.pig
new file mode 100644
index 0000000..9aa8d63
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/file.pig
@@ -0,0 +1 @@
+objectTypes_file = LOAD '' USING JsonLoader('id:chararray, 
image:(duration:double, height:int, width:int, url:chararray), 
displayName:chararray, summary:chararray, content:chararray, url:chararray, 
objectType:chararray, author:(id:chararray, image:(duration:double, height:int, 
width:int, url:chararray), displayName:chararray, summary:chararray, 
content:chararray, url:chararray, objectType:chararray, author:(id:chararray, 
displayName:chararray, summary:chararray, content:chararray, url:chararray, 
objectType:chararray, published:chararray, updated:chararray, {t: 
(upstreamDuplicates:chararray)}, {t: (downstreamDuplicates:chararray)}), 
published:chararray, updated:chararray, {t: (upstreamDuplicates:chararray)}, 
{t: (downstreamDuplicates:chararray)}), published:chararray, updated:chararray, 
{t: (upstreamDuplicates:chararray)}, {t: (downstreamDuplicates:chararray)}, 
fileUrl:chararray, mimeType:chararray');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/photo-album.pig
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/photo-album.pig
 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/photo-album.pig
new file mode 100644
index 0000000..83b150f
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/resources/expected/objectTypes/photo-album.pig
@@ -0,0 +1 @@
+objectTypes_photoalbum = LOAD '' USING JsonLoader('objectType:chararray, {t: 
()}');
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pig/src/test/resources/streams-plugin-pig/pom.xml
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pig/src/test/resources/streams-plugin-pig/pom.xml
 
b/streams-plugins/streams-plugin-pig/src/test/resources/streams-plugin-pig/pom.xml
new file mode 100644
index 0000000..7027446
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pig/src/test/resources/streams-plugin-pig/pom.xml
@@ -0,0 +1,75 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.streams.plugins</groupId>
+    <artifactId>streams-plugin-pig-test</artifactId>
+    <version>0.3-incubating-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <name>Test StreamsPigResourceGeneratorMojo</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.streams.plugins</groupId>
+                <artifactId>streams-plugin-pig</artifactId>
+                <version>0.3-incubating-SNAPSHOT</version>
+                <configuration>
+                    <sourcePaths>
+                        
<sourcePath>target/test-classes/streams-schemas/activity.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/collection.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/media_link.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/object.json</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/objectTypes</sourcePath>
+                        
<sourcePath>target/test-classes/streams-schemas/verbs</sourcePath>
+                    </sourcePaths>
+                    
<targetDirectory>target/generated-resources/test-mojo</targetDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>pig</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.10</version>
+                <configuration>
+                    <includes>**/*.json</includes>
+                    
<outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                    <includeGroupIds>org.apache.streams</includeGroupIds>
+                    <includeArtifactIds>streams-schemas</includeArtifactIds>
+                    <includeTypes>jar,test-jar</includeTypes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>unpack-schemas</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/pom.xml 
b/streams-plugins/streams-plugin-pojo/pom.xml
index d7210c8..bfa3480 100644
--- a/streams-plugins/streams-plugin-pojo/pom.xml
+++ b/streams-plugins/streams-plugin-pojo/pom.xml
@@ -64,13 +64,6 @@
             <version>0.4.10</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.streams</groupId>
-            <artifactId>streams-pojo</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
             <groupId>org.reflections</groupId>
             <artifactId>reflections</artifactId>
             <version>0.9.9</version>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGenerator.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGenerator.java
 
b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGenerator.java
index d80123d..f7b6617 100644
--- 
a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGenerator.java
+++ 
b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGenerator.java
@@ -1,26 +1,14 @@
 package org.apache.streams.plugins;
 
 import com.google.common.base.Preconditions;
-import org.apache.maven.artifact.DependencyResolutionRequiredException;
-import org.apache.maven.plugin.MojoExecutionException;
 import org.jsonschema2pojo.Jsonschema2Pojo;
-import org.jsonschema2pojo.maven.ProjectClasspath;
-import org.jsonschema2pojo.util.URLUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.io.IOException;
-import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.apache.commons.lang.StringUtils.isNotBlank;
 
 /**
  * Created by sblackmon on 4/20/16.
@@ -31,11 +19,9 @@ public class StreamsPojoSourceGenerator implements Runnable {
 
     private final static String LS = System.getProperty("line.separator");
 
-    private StreamsPojoSourceGeneratorMojo mojo;
-
     private StreamsPojoGenerationConfig config;
 
-    public void main(String[] args) {
+    public static void main(String[] args) {
         StreamsPojoGenerationConfig config = new StreamsPojoGenerationConfig();
 
         String sourceDirectory = "./target/test-classes/activities";

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
 
b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
index 9d595fe..8cf1697 100644
--- 
a/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
+++ 
b/streams-plugins/streams-plugin-pojo/src/main/java/org/apache/streams/plugins/StreamsPojoSourceGeneratorMojo.java
@@ -3,6 +3,7 @@ package org.apache.streams.plugins;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Execute;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -39,6 +40,8 @@ public class StreamsPojoSourceGeneratorMojo extends 
AbstractMojo {
 
     private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPojoSourceGeneratorMojo.class);
 
+    private volatile MojoFailureException mojoFailureException;
+
     @Component
     public MavenProject project;
 
@@ -67,7 +70,7 @@ public class StreamsPojoSourceGeneratorMojo extends 
AbstractMojo {
     @Parameter(readonly = true)
     public String targetPackage;
 
-    public void execute() throws MojoExecutionException {
+    public void execute() throws MojoExecutionException, MojoFailureException {
 
         addProjectDependenciesToClasspath();
 
@@ -81,38 +84,30 @@ public class StreamsPojoSourceGeneratorMojo extends 
AbstractMojo {
         config.setTargetDirectory(targetDirectory);
 
         StreamsPojoSourceGenerator streamsPojoSourceGenerator = new 
StreamsPojoSourceGenerator(config);
+
+        Thread.UncaughtExceptionHandler h = new 
Thread.UncaughtExceptionHandler() {
+            public void uncaughtException(Thread th, Throwable ex) {
+                LOGGER.error("Exception", ex);
+                mojoFailureException = new MojoFailureException("Exception", 
ex);
+            }
+        };
+        Thread.setDefaultUncaughtExceptionHandler(h);
         Thread thread = new Thread(streamsPojoSourceGenerator);
-        thread.start();
+        thread.setUncaughtExceptionHandler(h);
         try {
+            thread.start();
             thread.join();
         } catch (InterruptedException e) {
             LOGGER.error("InterruptedException", e);
         } catch (Exception e) {
             LOGGER.error("Exception", e);
+            throw new MojoFailureException("Exception", e);
         }
-        return;
 
-//        List<Class<?>> serializableClasses = detectSerializableClasses();
-//
-//        LOGGER.info("Detected {} serialiables:", serializableClasses.size());
-//        for( Class clazz : serializableClasses )
-//            LOGGER.debug(clazz.toString());
-//
-//        List<Class<?>> pojoClasses = detectPojoClasses(serializableClasses);
-//
-//        LOGGER.info("Detected {} pojos:", pojoClasses.size());
-//        for( Class clazz : pojoClasses ) {
-//            LOGGER.debug(clazz.toString());
-//
-//        }
-//
-//
-//        for( Class clazz : pojoClasses ) {
-//            String pojoPath = 
clazz.getPackage().getName().replace(".pojo.json", 
".hive").replace(".","/")+"/";
-//            String pojoName = clazz.getSimpleName()+".hql";
-//            String pojoHive = renderPojo(clazz);
-//            writeFile(outDir+"/"+pojoPath+pojoName, pojoHive);
-//        }
+        if( mojoFailureException != null )
+            throw mojoFailureException;
+
+        return;
 
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-pojo/src/site/markdown/index.md 
b/streams-plugins/streams-plugin-pojo/src/site/markdown/index.md
new file mode 100644
index 0000000..d1bd848
--- /dev/null
+++ b/streams-plugins/streams-plugin-pojo/src/site/markdown/index.md
@@ -0,0 +1,22 @@
+org.apache.streams.plugins:streams-plugin-pojo
+==============================================
+
+streams-plugin-pojo generates source files from json schemas suitable for 
writing Apache Streams components and libraries in Java.
+
+#### Usage
+
+Run within a module containing a src/main/jsonschema directory
+
+    mvn 
org.apache.streams.plugins:streams-plugin-pojo:0.3-incubating-SNAPSHOT:pojo
+
+Output will be placed in target/generated-sources/pojo by default
+
+#### Example
+
+[streams-plugin-pojo/pom.xml](streams-plugin-pojo/pom.xml 
"streams-plugin-pojo/pom.xml")
+
+#### Documentation
+
+[JavaDocs](apidocs/index.html "JavaDocs")
+
+###### Licensed under Apache License 2.0 - 
http://www.apache.org/licenses/LICENSE-2.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorCLITest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorCLITest.java
 
b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorCLITest.java
new file mode 100644
index 0000000..f808b28
--- /dev/null
+++ 
b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorCLITest.java
@@ -0,0 +1,43 @@
+package org.apache.streams.plugins.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import org.apache.streams.plugins.StreamsPojoSourceGenerator;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+import static 
org.apache.streams.plugins.test.StreamsPojoSourceGeneratorTest.javaFilter;
+
+/**
+ * Created by sblackmon on 5/5/16.
+ */
+public class StreamsPojoSourceGeneratorCLITest {
+
+    private final static Logger LOGGER = 
LoggerFactory.getLogger(StreamsPojoSourceGeneratorTest.class);
+
+    @Test
+    public void testStreamsPojoSourceGeneratorCLI() throws Exception {
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+        String targetDirectory = "target/generated-sources/test-cli";
+
+        List<String> argsList = Lists.newArrayList(sourceDirectory, 
targetDirectory);
+        StreamsPojoSourceGenerator.main(argsList.toArray(new String[0]));
+
+        File testOutput = new File(targetDirectory);
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(javaFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() > 133 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git 
a/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorMojoTest.java
 
b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorMojoTest.java
index a99f059..1968d90 100644
--- 
a/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorMojoTest.java
+++ 
b/streams-plugins/streams-plugin-pojo/src/test/java/org/apache/streams/plugins/test/StreamsPojoSourceGeneratorMojoTest.java
@@ -1,24 +1,25 @@
 package org.apache.streams.plugins.test;
 
 import com.google.common.collect.Lists;
+import com.google.common.io.Files;
 import junit.framework.TestCase;
 import org.apache.maven.it.Verifier;
 import org.apache.maven.it.util.ResourceExtractor;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.apache.streams.plugins.StreamsPojoGenerationConfig;
-import org.apache.streams.plugins.StreamsPojoSourceGenerator;
-import org.apache.streams.plugins.StreamsPojoSourceGeneratorMojo;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
+import static 
org.apache.streams.plugins.test.StreamsPojoSourceGeneratorTest.javaFilter;
+
 /**
- * Test that Activity beans are compatible with the example activities in the 
spec.
+ * Tests that streams-plugin-pojo running via maven can convert activity 
schemas into pojos
+ * which then compile.
  */
 public class StreamsPojoSourceGeneratorMojoTest extends TestCase {
 
@@ -30,12 +31,7 @@ public class StreamsPojoSourceGeneratorMojoTest extends 
TestCase {
         super.setUp();
     }
 
-    /**
-     * Tests that streams-plugin-pojo running via maven can convert activity 
schemas into pojos
-     * which then compile.
-     *
-     * @throws Exception
-     */
+
     @Test
     public void testStreamsPojoSourceGeneratorMojo() throws Exception {
 
@@ -56,41 +52,17 @@ public class StreamsPojoSourceGeneratorMojoTest extends 
TestCase {
         verifier.verifyErrorFreeLog();
 
         verifier.resetStreams();
-//
-//        File pom = getTestFile(  );
-//        assertNotNull( pom );
-//        assertTrue( pom.exists() );
-//
-//        StreamsPojoSourceGeneratorMojo myMojo = 
(StreamsPojoSourceGeneratorMojo)
-//                lookupMojo( "pojo", pom);
-//        assertNotNull( myMojo );
-//        myMojo.execute();
-//
-//        File testOutput = new File( "target/generated-sources/test-mojo");
-//        FileFilter javaFilter = new FileFilter() {
-//            @Override
-//            public boolean accept(File pathname) {
-//            if( pathname.getName().endsWith(".java") )
-//                return true;
-//            return false;
-//            }
-//        };
-//
-//        assert( testOutput != null );
-//        assert( testOutput.exists() == true );
-//        assert( testOutput.isDirectory() == true );
-//        assert( testOutput.listFiles(javaFilter).length == 11 );
-//        assert( new File(testOutput + "/traits").exists() == true );
-//        assert( new File(testOutput + "/traits").isDirectory() == true );
-//        assert( new File(testOutput + "/traits").listFiles(scalaFilter) != 
null );
-//        assert( new File(testOutput + 
"/traits").listFiles(scalaFilter).length == 4 );
-//        assert( new File(testOutput + "/objectTypes").exists() == true );
-//        assert( new File(testOutput + "/objectTypes").isDirectory() == true 
);
-//        assert( new File(testOutput + "/objectTypes").listFiles(scalaFilter) 
!= null );
-//        assert( new File(testOutput + 
"/objectTypes").listFiles(scalaFilter).length == 43 );
-//        assert( new File(testO`utput + "/verbs").exists() == true );
-//        assert( new File(testOutput + "/verbs").isDirectory() == true );
-//        assert( new File(testOutput + "/verbs").listFiles(scalaFilter) != 
null );
-//        assert( new File(testOutput + 
"/verbs").listFiles(scalaFilter).length == 89 );
+
+        File testOutput = new File(testDir.getAbsolutePath() + 
"/target/generated-sources/test-mojo");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = 
Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(javaFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() > 133 );
+
     }
 }
\ No newline at end of file

Reply via email to