drill-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jacq...@apache.org
Subject [07/13] drill git commit: DRILL-3742: Classpath scanning and build improvement
Date Mon, 26 Oct 2015 17:42:54 GMT
http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestFragmenter.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestFragmenter.java b/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestFragmenter.java
index 6491df6..6a49116 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestFragmenter.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestFragmenter.java
@@ -25,8 +25,8 @@ import java.io.IOException;
 
 import org.apache.drill.exec.exception.FragmentSetupException;
 import org.apache.drill.exec.planner.PhysicalPlanReader;
+import org.apache.drill.exec.planner.PhysicalPlanReaderTestFactory;
 import org.apache.drill.exec.planner.fragment.Fragment;
-import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint;
 import org.apache.drill.exec.work.foreman.ForemanSetupException;
 import org.junit.Test;
 
@@ -36,7 +36,7 @@ public class TestFragmenter extends PopUnitTestBase {
 
   @Test
   public void ensureOneFragment() throws FragmentSetupException, IOException, ForemanSetupException
{
-    PhysicalPlanReader ppr = new PhysicalPlanReader(CONFIG, CONFIG.getMapper(), DrillbitEndpoint.getDefaultInstance());
+    PhysicalPlanReader ppr = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(CONFIG);
     Fragment b = getRootFragment(ppr, "/physical_test1.json");
     assertEquals(1, getFragmentCount(b));
     assertEquals(0, b.getReceivingExchangePairs().size());
@@ -45,7 +45,7 @@ public class TestFragmenter extends PopUnitTestBase {
 
   @Test
   public void ensureThreeFragments() throws FragmentSetupException, IOException, ForemanSetupException
{
-    PhysicalPlanReader ppr = new PhysicalPlanReader(CONFIG, CONFIG.getMapper(), DrillbitEndpoint.getDefaultInstance());
+    PhysicalPlanReader ppr = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(CONFIG);
     Fragment b = getRootFragment(ppr, "/physical_double_exchange.json");
     logger.debug("Fragment Node {}", b);
     assertEquals(3, getFragmentCount(b));

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestInjectionValue.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestInjectionValue.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestInjectionValue.java
index ac03f7a..d184a12 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestInjectionValue.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/pop/TestInjectionValue.java
@@ -28,6 +28,7 @@ import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.physical.base.PhysicalOperator;
 import org.apache.drill.exec.physical.config.Screen;
 import org.apache.drill.exec.planner.PhysicalPlanReader;
+import org.apache.drill.exec.planner.PhysicalPlanReaderTestFactory;
 import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -47,7 +48,7 @@ public class TestInjectionValue extends ExecTest {
 
   @Test
   public void testInjected() throws Exception{
-    PhysicalPlanReader r = new PhysicalPlanReader(config, config.getMapper(), DrillbitEndpoint.getDefaultInstance());
+    PhysicalPlanReader r = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(config);
     PhysicalPlan p = r.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/physical_screen.json"),
Charsets.UTF_8));
 
     List<PhysicalOperator> o = p.getSortedOperators(false);

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestCustomUserAuthenticator.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestCustomUserAuthenticator.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestCustomUserAuthenticator.java
index d9b4634..c6e578f 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestCustomUserAuthenticator.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/TestCustomUserAuthenticator.java
@@ -22,15 +22,16 @@ import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.rpc.RpcException;
 import org.apache.drill.exec.rpc.user.UserSession;
+import org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
 import java.util.Properties;
 
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_1;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_1_PASSWORD;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_2;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_2_PASSWORD;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_1;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_1_PASSWORD;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_2;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_2_PASSWORD;
 import static org.hamcrest.core.StringContains.containsString;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/UserAuthenticatorTestImpl.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/UserAuthenticatorTestImpl.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/UserAuthenticatorTestImpl.java
deleted file mode 100644
index dc30797..0000000
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/UserAuthenticatorTestImpl.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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
- * with the License.  You may obtain a copy of the License at
- *
- *    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.
- */
-package org.apache.drill.exec.rpc.user.security;
-
-import org.apache.drill.common.config.DrillConfig;
-import org.apache.drill.exec.exception.DrillbitStartupException;
-import org.apache.drill.exec.util.ImpersonationUtil;
-import org.apache.hadoop.security.UserGroupInformation;
-
-import java.io.IOException;
-
-/*
- * Implement {@link org.apache.drill.exec.rpc.user.security.UserAuthenticator} for testing
UserAuthenticator and
- * authentication of users from Java client to Drillbit.
- */
-@UserAuthenticatorTemplate(type = UserAuthenticatorTestImpl.TYPE)
-public class UserAuthenticatorTestImpl implements UserAuthenticator {
-  public static final String TYPE = "drillTestAuthenticator";
-
-  public static final String TEST_USER_1 = "testUser1";
-  public static final String TEST_USER_2 = "testUser2";
-  public static final String ADMIN_USER = "admin";
-  public static final String PROCESS_USER = ImpersonationUtil.getProcessUserName();
-  public static final String TEST_USER_1_PASSWORD = "testUser1Password";
-  public static final String TEST_USER_2_PASSWORD = "testUser2Password";
-  public static final String ADMIN_USER_PASSWORD = "adminUserPw";
-  public static final String PROCESS_USER_PASSWORD = "processUserPw";
-
-  public static final String ADMIN_GROUP = "admingrp";
-
-  static {
-    UserGroupInformation.createUserForTesting("testUser1", new String[]{"g1", ADMIN_GROUP});
-    UserGroupInformation.createUserForTesting("testUser2", new String[]{ "g1" });
-    UserGroupInformation.createUserForTesting("admin", new String[]{ ADMIN_GROUP });
-  }
-
-  @Override
-  public void setup(DrillConfig drillConfig) throws DrillbitStartupException {
-    // Nothing to setup.
-  }
-
-  @Override
-  public void authenticate(String user, String password) throws UserAuthenticationException
{
-
-    if ("anonymous".equals(user)) {
-      // Allow user "anonymous" for test framework to work.
-      return;
-    }
-
-    if (!(TEST_USER_1.equals(user) && TEST_USER_1_PASSWORD.equals(password)) &&
-        !(TEST_USER_2.equals(user) && TEST_USER_2_PASSWORD.equals(password)) &&
-        !(ADMIN_USER.equals(user) && ADMIN_USER_PASSWORD.equals(password)) &&
-        !(PROCESS_USER.equals(user) && PROCESS_USER_PASSWORD.equals(password))) {
-      throw new UserAuthenticationException();
-    }
-  }
-
-  @Override
-  public void close() throws IOException {
-    // Nothing to cleanup.
-  }
-}

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/testing/UserAuthenticatorTestImpl.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/testing/UserAuthenticatorTestImpl.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/testing/UserAuthenticatorTestImpl.java
new file mode 100644
index 0000000..7cfab5f
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/rpc/user/security/testing/UserAuthenticatorTestImpl.java
@@ -0,0 +1,80 @@
+/**
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    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.
+ */
+package org.apache.drill.exec.rpc.user.security.testing;
+
+import org.apache.drill.common.config.DrillConfig;
+import org.apache.drill.exec.exception.DrillbitStartupException;
+import org.apache.drill.exec.rpc.user.security.UserAuthenticationException;
+import org.apache.drill.exec.rpc.user.security.UserAuthenticator;
+import org.apache.drill.exec.rpc.user.security.UserAuthenticatorTemplate;
+import org.apache.drill.exec.util.ImpersonationUtil;
+import org.apache.hadoop.security.UserGroupInformation;
+
+import java.io.IOException;
+
+/*
+ * Implement {@link org.apache.drill.exec.rpc.user.security.UserAuthenticator} for testing
UserAuthenticator and
+ * authentication of users from Java client to Drillbit.
+ */
+@UserAuthenticatorTemplate(type = UserAuthenticatorTestImpl.TYPE)
+public class UserAuthenticatorTestImpl implements UserAuthenticator {
+  public static final String TYPE = "drillTestAuthenticator";
+
+  public static final String TEST_USER_1 = "testUser1";
+  public static final String TEST_USER_2 = "testUser2";
+  public static final String ADMIN_USER = "admin";
+  public static final String PROCESS_USER = ImpersonationUtil.getProcessUserName();
+  public static final String TEST_USER_1_PASSWORD = "testUser1Password";
+  public static final String TEST_USER_2_PASSWORD = "testUser2Password";
+  public static final String ADMIN_USER_PASSWORD = "adminUserPw";
+  public static final String PROCESS_USER_PASSWORD = "processUserPw";
+
+  public static final String ADMIN_GROUP = "admingrp";
+
+  static {
+    UserGroupInformation.createUserForTesting("testUser1", new String[]{"g1", ADMIN_GROUP});
+    UserGroupInformation.createUserForTesting("testUser2", new String[]{ "g1" });
+    UserGroupInformation.createUserForTesting("admin", new String[]{ ADMIN_GROUP });
+  }
+
+  @Override
+  public void setup(DrillConfig drillConfig) throws DrillbitStartupException {
+    // Nothing to setup.
+  }
+
+  @Override
+  public void authenticate(String user, String password) throws UserAuthenticationException
{
+
+    if ("anonymous".equals(user)) {
+      // Allow user "anonymous" for test framework to work.
+      return;
+    }
+
+    if (!(TEST_USER_1.equals(user) && TEST_USER_1_PASSWORD.equals(password)) &&
+        !(TEST_USER_2.equals(user) && TEST_USER_2_PASSWORD.equals(password)) &&
+        !(ADMIN_USER.equals(user) && ADMIN_USER_PASSWORD.equals(password)) &&
+        !(PROCESS_USER.equals(user) && PROCESS_USER_PASSWORD.equals(password))) {
+      throw new UserAuthenticationException();
+    }
+  }
+
+  @Override
+  public void close() throws IOException {
+    // Nothing to cleanup.
+  }
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestBitRpc.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestBitRpc.java b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestBitRpc.java
index 71b0b1d..107f978 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestBitRpc.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestBitRpc.java
@@ -18,20 +18,16 @@
 package org.apache.drill.exec.server;
 
 import static org.junit.Assert.assertTrue;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.DrillBuf;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
-import mockit.Injectable;
-import mockit.NonStrictExpectations;
-
 import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.common.expression.ExpressionPosition;
 import org.apache.drill.common.expression.SchemaPath;
+import org.apache.drill.common.scanner.ClassPathScanner;
 import org.apache.drill.common.types.TypeProtos.MinorType;
 import org.apache.drill.common.types.Types;
 import org.apache.drill.exec.ExecTest;
@@ -47,15 +43,12 @@ import org.apache.drill.exec.proto.UserBitShared.QueryId;
 import org.apache.drill.exec.record.FragmentWritableBatch;
 import org.apache.drill.exec.record.MaterializedField;
 import org.apache.drill.exec.record.WritableBatch;
-import org.apache.drill.exec.rpc.RemoteConnection;
-import org.apache.drill.exec.rpc.ResponseSender;
 import org.apache.drill.exec.rpc.RpcException;
 import org.apache.drill.exec.rpc.RpcOutcomeListener;
 import org.apache.drill.exec.rpc.control.WorkEventBus;
 import org.apache.drill.exec.rpc.data.AckSender;
 import org.apache.drill.exec.rpc.data.DataConnectionManager;
 import org.apache.drill.exec.rpc.data.DataResponseHandler;
-import org.apache.drill.exec.rpc.data.DataRpcConfig;
 import org.apache.drill.exec.rpc.data.DataServer;
 import org.apache.drill.exec.rpc.data.DataTunnel;
 import org.apache.drill.exec.vector.Float8Vector;
@@ -67,14 +60,21 @@ import org.junit.Test;
 import com.google.common.base.Stopwatch;
 import com.google.common.collect.Lists;
 
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.DrillBuf;
+import mockit.Injectable;
+import mockit.NonStrictExpectations;
+
 public class TestBitRpc extends ExecTest {
   static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestBitRpc.class);
 
   @Test
   public void testConnectionBackpressure(@Injectable WorkerBee bee, @Injectable final WorkEventBus
workBus, @Injectable final FragmentManager fman, @Injectable final FragmentContext fcon) throws
Exception {
 
-    final BootStrapContext c = new BootStrapContext(DrillConfig.create());
-    BootStrapContext c2 = new BootStrapContext(DrillConfig.create());
+    DrillConfig config1 = DrillConfig.create();
+    final BootStrapContext c = new BootStrapContext(config1, ClassPathScanner.fromPrescan(config1));
+    DrillConfig config2 = DrillConfig.create();
+    BootStrapContext c2 = new BootStrapContext(config2, ClassPathScanner.fromPrescan(config2));
 
     new NonStrictExpectations() {{
       workBus.getFragmentManagerIfExists((FragmentHandle) any); result = fman;

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestOptionsAuthEnabled.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestOptionsAuthEnabled.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestOptionsAuthEnabled.java
index b029caa..8de77fb 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestOptionsAuthEnabled.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/server/TestOptionsAuthEnabled.java
@@ -20,21 +20,21 @@ package org.apache.drill.exec.server;
 import org.apache.drill.BaseTestQuery;
 import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.exec.ExecConstants;
-import org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl;
+import org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.Properties;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.ADMIN_GROUP;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.ADMIN_USER;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.ADMIN_USER_PASSWORD;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.PROCESS_USER;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.PROCESS_USER_PASSWORD;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_1;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_1_PASSWORD;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_2;
+import static org.apache.drill.exec.rpc.user.security.testing.UserAuthenticatorTestImpl.TEST_USER_2_PASSWORD;
 
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.ADMIN_GROUP;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.ADMIN_USER;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.ADMIN_USER_PASSWORD;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.PROCESS_USER;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.PROCESS_USER_PASSWORD;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_1;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_1_PASSWORD;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_2;
-import static org.apache.drill.exec.rpc.user.security.UserAuthenticatorTestImpl.TEST_USER_2_PASSWORD;
+import java.util.Properties;
 
 /**
  * Test setting system scoped options with user authentication enabled. (DRILL-3622)

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/resources/drill-external-sort.conf
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/drill-external-sort.conf b/exec/java-exec/src/test/resources/drill-external-sort.conf
index 52e4303..aa3b43d 100644
--- a/exec/java-exec/src/test/resources/drill-external-sort.conf
+++ b/exec/java-exec/src/test/resources/drill-external-sort.conf
@@ -2,9 +2,12 @@
 //  This file can also include any supplementary configuration information.
 //  This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md
for more information.
 
-drill.logical.function.packages += "org.apache.drill.exec.expr.fn.impl"
+drill: {
+  classpath.scanning: {
+    packages += "org.apache.drill.exec.expr.fn.impl"
+  }
 
-drill.exec: {
+  exec: {
 sort: {
     purge.threshold : 100,
     external: {
@@ -18,4 +21,4 @@ sort: {
       }
     }
   }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/resources/drill-module.conf
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/drill-module.conf b/exec/java-exec/src/test/resources/drill-module.conf
index 76dff48..7925b56 100644
--- a/exec/java-exec/src/test/resources/drill-module.conf
+++ b/exec/java-exec/src/test/resources/drill-module.conf
@@ -2,9 +2,15 @@
 //  This file can also include any supplementary configuration information.
 //  This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md
for more information.
 
-drill.logical.function.packages += "org.apache.drill.exec.expr.fn.impl"
-
-drill.exec: {
+drill: {
+  classpath.scanning: {
+    packages += "org.apache.drill.exec.fn.impl.testing",
+    packages += "org.apache.drill.exec.physical.config",
+    packages += "org.apache.drill.exec.store",
+    packages += "org.apache.drill.exec.testing",
+    packages += "org.apache.drill.exec.rpc.user.security.testing"
+  }
+  exec: {
   cluster-id: "drillbits1"
   rpc: {
     user: {
@@ -45,7 +51,7 @@ drill.exec: {
   zk: {
     connect: "localhost:2181",
     root: "drill/happy",
-    refresh: 500,
+    refresh: 5,
     timeout: 5000,
     retry: {
       count: 7200,
@@ -61,4 +67,5 @@ drill.exec: {
     global.max.width: 100,
     executor.threads: 4
   }
+  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/resources/drill-oom-xsort.conf
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/drill-oom-xsort.conf b/exec/java-exec/src/test/resources/drill-oom-xsort.conf
index c617a29..2b5ba80 100644
--- a/exec/java-exec/src/test/resources/drill-oom-xsort.conf
+++ b/exec/java-exec/src/test/resources/drill-oom-xsort.conf
@@ -2,9 +2,11 @@
 //  This file can also include any supplementary configuration information.
 //  This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md
for more information.
 
-drill.logical.function.packages += "org.apache.drill.exec.expr.fn.impl"
-
-drill.exec: {
+drill: {
+  classpath.scanning: {
+    packages += "org.apache.drill.exec.expr.fn.impl"
+  },
+  exec: {
   memory: {
     fragment: {
       max: 50000000,
@@ -15,4 +17,5 @@ drill.exec: {
       initial: 2000000
     }
   }
-}
\ No newline at end of file
+  }
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/java-exec/src/test/resources/drill-spool-test-module.conf
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/drill-spool-test-module.conf b/exec/java-exec/src/test/resources/drill-spool-test-module.conf
index 89d248a..b305835 100644
--- a/exec/java-exec/src/test/resources/drill-spool-test-module.conf
+++ b/exec/java-exec/src/test/resources/drill-spool-test-module.conf
@@ -2,9 +2,13 @@
 //  This file can also include any supplementary configuration information.
 //  This file is in HOCON format, see https://github.com/typesafehub/config/blob/master/HOCON.md
for more information.
 
-drill.logical.function.packages += "org.apache.drill.exec.expr.fn.impl"
-
-drill.exec: {
+drill: {
+  classpath.scanning: {
+    packages += "org.apache.drill.exec.expr.fn.impl"
+    packages += "org.apache.drill.exec.physical.config"
+    packages += "org.apache.drill.exec.store"
+  },
+  exec: {
   cluster-id: "drillbits1"
   rpc: {
     user: {
@@ -28,16 +32,10 @@ drill.exec: {
     },
     use.ip : false
   },
-  operator: {
-    packages += "org.apache.drill.exec.physical.config"
-  },
   optimizer: {
     implementation: "org.apache.drill.exec.opt.IdentityOptimizer"
   },
   functions: ["org.apache.drill.expr.fn.impl"],
-  storage: {
-    packages += "org.apache.drill.exec.store"
-  },
   metrics : {
     context: "drillbit",
     jmx: {
@@ -80,4 +78,5 @@ drill.exec: {
     delete: false,
     size: 0
   }
+  }
 }

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/jdbc-all/example-conf/drill-module.conf
----------------------------------------------------------------------
diff --git a/exec/jdbc-all/example-conf/drill-module.conf b/exec/jdbc-all/example-conf/drill-module.conf
index 082b8e6..6d8498c 100644
--- a/exec/jdbc-all/example-conf/drill-module.conf
+++ b/exec/jdbc-all/example-conf/drill-module.conf
@@ -1,13 +1,12 @@
 drill: {
-  logical: {
-    operator.packages: ["org.apache.drill.common.logical.data"],
-    expression.packages: ["org.apache.drill.common.expression"],
-    function.packages: ["org.apache.drill.common.expression"],
-    storage.packages: []
-  },
-  physical: {
-    operator.packages: ["org.apache.drill.common.physical.pop"]
+  classpath.scanning: {
+    packages: [
+      "org.apache.drill.common.logical.data",
+      "org.apache.drill.common.expression",
+      "org.apache.drill.common.expression",
+      "org.apache.drill.common.physical.pop",
+      "org.apache.drill.exec.store.mock"
+    ]
   }
 }
 
-drill.exec.storage.packages += org.apache.drill.exec.store.mock

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/jdbc-all/pom.xml
----------------------------------------------------------------------
diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml
index 10a8889..8bacbf5 100644
--- a/exec/jdbc-all/pom.xml
+++ b/exec/jdbc-all/pom.xml
@@ -135,17 +135,6 @@
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>org.apache.drill</groupId>
-      <artifactId>drill-common</artifactId>
-      <version>${project.version}</version>
-      <exclusions>
-        <exclusion>
-          <artifactId>javassist</artifactId>
-          <groupId>javassist</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
       <groupId>org.apache.drill.exec</groupId>
       <artifactId>drill-jdbc</artifactId>
       <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
----------------------------------------------------------------------
diff --git a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
index 2792f91..b161e20 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/test/JdbcAssert.java
@@ -37,6 +37,7 @@ import org.apache.drill.common.logical.LogicalPlan;
 import org.apache.drill.common.logical.data.LogicalOperator;
 import org.apache.drill.common.util.Hook;
 import org.apache.drill.exec.ExecConstants;
+import org.apache.drill.exec.planner.PhysicalPlanReaderTestFactory;
 import org.apache.drill.jdbc.ConnectionFactory;
 import org.apache.drill.jdbc.ConnectionInfo;
 import org.junit.Assert;
@@ -162,6 +163,7 @@ public class JdbcAssert {
     public ModelAndSchema(final Properties info, final ConnectionFactory factory) {
       this.info = info;
       this.adapter = new ConnectionFactoryAdapter() {
+        @Override
         public Connection createConnection() throws Exception {
           return factory.getConnection(new ConnectionInfo("jdbc:drill:zk=local", ModelAndSchema.this.info));
         }
@@ -307,6 +309,7 @@ public class JdbcAssert {
       Connection connection = null;
       Statement statement = null;
       final Hook.Closeable x = Hook.LOGICAL_PLAN.add(new Function<String, Void>() {
+        @Override
         public Void apply(String o) {
           plan0[0] = o;
           return null;
@@ -317,7 +320,7 @@ public class JdbcAssert {
         statement = connection.prepareStatement(sql);
         statement.close();
         final String plan = plan0[0].trim();
-        return LogicalPlan.parse(DrillConfig.create(), plan);
+        return LogicalPlan.parse(PhysicalPlanReaderTestFactory.defaultLogicalPlanPersistence(DrillConfig.create()),
plan);
       } catch (Exception e) {
         throw new RuntimeException(e);
       } finally {

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 882f8d8..acfb467 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
     -->
     <hive.version>1.0.0</hive.version>
     <hadoop.version>2.4.1</hadoop.version>
+    <fmpp.version>0.9.14</fmpp.version>
   </properties>
 
   <scm>
@@ -156,7 +157,6 @@
           </execution>
         </executions>
         <configuration>
-
           <excludeSubprojects>false</excludeSubprojects>
           <excludes>
             <exclude>**/*.log</exclude>
@@ -202,7 +202,7 @@
         <executions>
           <execution>
             <id>checkstyle-validation</id>
-            <phase>validate</phase>
+            <phase>verify</phase>
             <configuration>
               <includes>**/*.java</includes>
               <encoding>UTF-8</encoding>
@@ -281,7 +281,7 @@
         <executions>
           <execution>
             <id>validate_java_and_maven_version</id>
-            <phase>validate</phase>
+            <phase>verify</phase>
             <goals>
               <goal>enforce</goal>
             </goals>
@@ -299,6 +299,7 @@
           </execution>
           <execution>
             <id>avoid_bad_dependencies</id>
+            <phase>verify</phase>
             <goals>
               <goal>enforce</goal>
             </goals>
@@ -366,7 +367,7 @@
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
-          <version>0.10</version>
+          <version>0.11</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -389,7 +390,7 @@
             <argLine>-Xms512m -Xmx3g -Ddrill.exec.http.enabled=false
               -Ddrill.exec.sys.store.provider.local.write=false
               -Dorg.apache.drill.exec.server.Drillbit.system_options="org.apache.drill.exec.compile.ClassTransformer.scalar_replacement=on"
-              -XX:MaxPermSize=256M -XX:MaxDirectMemorySize=3072M
+              -XX:MaxPermSize=512M -XX:MaxDirectMemorySize=3072M
               -XX:+CMSClassUnloadingEnabled -ea</argLine>
             <forkCount>${forkCount}</forkCount>
             <reuseForks>true</reuseForks>
@@ -1885,6 +1886,7 @@
     </profile>
   </profiles>
   <modules>
+    <module>tools</module>
     <module>protocol</module>
     <module>common</module>
     <module>exec</module>

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/src/main/resources/checkstyle-config.xml
----------------------------------------------------------------------
diff --git a/src/main/resources/checkstyle-config.xml b/src/main/resources/checkstyle-config.xml
index 0758908..32bbbe8 100644
--- a/src/main/resources/checkstyle-config.xml
+++ b/src/main/resources/checkstyle-config.xml
@@ -36,6 +36,7 @@
 
   <module name="RegexpSingleline">
     <property name="format" value="\s+$"/>
+    <property name="message" value="A line of code cannot contain any trailing whitespace"/>
   </module>
 
 </module>

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/tools/fmpp/pom.xml
----------------------------------------------------------------------
diff --git a/tools/fmpp/pom.xml b/tools/fmpp/pom.xml
new file mode 100644
index 0000000..95b13ce
--- /dev/null
+++ b/tools/fmpp/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0"?>
+<!-- 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 with the License. You may obtain a copy of 
+  the License at 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>
+
+  <parent>
+    <artifactId>tools-parent</artifactId>
+    <groupId>org.apache.drill.tools</groupId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drill-fmpp-maven-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+  <name>tools/freemarker codegen tooling</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>3.3.3</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>commons-logging</artifactId>
+          <groupId>commons-logging</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>3.3.3</version>
+    </dependency>
+    <dependency>
+      <groupId>net.sourceforge.fmpp</groupId>
+      <artifactId>fmpp</artifactId>
+      <version>${fmpp.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>3.4</version>
+        <configuration>
+          <goalPrefix>drill-fmpp</goalPrefix>
+        </configuration>
+        <executions>
+          <execution>
+            <id>default-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+            <phase>process-classes</phase>
+          </execution>
+          <execution>
+            <id>help-descriptor</id>
+            <goals>
+              <goal>helpmojo</goal>
+            </goals>
+            <phase>process-classes</phase>
+          </execution>
+         </executions>
+       </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/tools/fmpp/src/main/java/org/apache/drill/fmpp/mojo/FMPPMojo.java
----------------------------------------------------------------------
diff --git a/tools/fmpp/src/main/java/org/apache/drill/fmpp/mojo/FMPPMojo.java b/tools/fmpp/src/main/java/org/apache/drill/fmpp/mojo/FMPPMojo.java
new file mode 100644
index 0000000..6474bb7
--- /dev/null
+++ b/tools/fmpp/src/main/java/org/apache/drill/fmpp/mojo/FMPPMojo.java
@@ -0,0 +1,227 @@
+/**
+ * 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
+ * with the License.  You may obtain a copy of the License at
+ *
+ * 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.
+ */
+package org.apache.drill.fmpp.mojo;
+
+import static java.lang.String.format;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+
+import com.google.common.base.Stopwatch;
+
+import fmpp.Engine;
+import fmpp.ProgressListener;
+import fmpp.progresslisteners.TerseConsoleProgressListener;
+import fmpp.setting.Settings;
+import fmpp.util.MiscUtil;
+
+/**
+ * a maven plugin to run the freemarker generation incrementally
+ * (if output has not changed, the files are not touched)
+ * @goal generate
+ * @phase generate-sources
+ */
+public class FMPPMojo extends AbstractMojo {
+
+  /**
+   * Used to add new source directories to the build.
+   * @parameter default-value="${project}"
+   * @required
+   * @readonly
+   **/
+  private MavenProject project;
+
+  /**
+   * Where to find the FreeMarker template files.
+   *
+   * @parameter default-value="src/main/resources/fmpp/templates/"
+   * @required
+   */
+  private File templates;
+
+
+  /**
+   * Where to write the generated files of the output files.
+   *
+   * @parameter default-value="${project.build.directory}/generated-sources/fmpp/"
+   * @required
+   */
+  private File output;
+
+  /**
+   * Location of the FreeMarker config file.
+   *
+   * @parameter default-value="src/main/resources/fmpp/config.fmpp"
+   * @required
+   */
+  private File config;
+
+  /**
+   * compilation scope to be added to ("compile" or "test")
+   *
+   * @parameter default-value="compile"
+   * @required
+   */
+  private String scope;
+
+  @Override
+  public void execute() throws MojoExecutionException, MojoFailureException {
+    if (project == null) {
+      throw new MojoExecutionException("This plugin can only be used inside a project.");
+    }
+    String outputPath = output.getAbsolutePath();
+    if ((!output.exists() && !output.mkdirs()) || !output.isDirectory()) {
+      throw new MojoFailureException("can not write to output dir: " + outputPath);
+    }
+    String templatesPath = templates.getAbsolutePath();
+    if (!templates.exists() || !templates.isDirectory()) {
+      throw new MojoFailureException("templates not found in dir: " + outputPath);
+    }
+
+    // add the output directory path to the project source directories
+    switch (scope) {
+      case "compile":
+        project.addCompileSourceRoot(outputPath);
+      break;
+      case "test":
+        project.addTestCompileSourceRoot(outputPath);
+      break;
+      default:
+        throw new MojoFailureException("scope must be compile or test");
+    }
+
+    final Stopwatch sw = new Stopwatch().start();
+    try {
+      getLog().info(format("Freemarker generation:\n scope: %s,\n config: %s,\n templates:
%s",
+          scope, config.getAbsolutePath(), templatesPath));
+      final File tmp = Files.createTempDirectory("freemarker-tmp").toFile();
+      String tmpPath = tmp.getAbsolutePath();
+      final String tmpPathNormalized = tmpPath.endsWith("/") ? tmpPath : tmpPath + "/";
+      Settings settings = new Settings(new File("."));
+      settings.set("sourceRoot", templatesPath);
+      settings.set("outputRoot", tmp.getAbsolutePath());
+      settings.load(config);
+      settings.addProgressListener(new TerseConsoleProgressListener());
+      settings.addProgressListener(new ProgressListener() {
+        @Override
+        public void notifyProgressEvent(
+            Engine engine, int event,
+            File src, int pMode,
+            Throwable error, Object param)
+            throws Exception {
+          if (event == EVENT_END_PROCESSING_SESSION) {
+            getLog().info(format("Freemarker generation took %dms", sw.elapsed(TimeUnit.MILLISECONDS)));
+            sw.reset();
+            Report report = moveIfChanged(tmp, tmpPathNormalized);
+            getLog().info(format("Incremental output update took %dms", sw.elapsed(TimeUnit.MILLISECONDS)));
+            getLog().info(format("new: %d", report.newFiles));
+            getLog().info(format("changed: %d", report.changedFiles));
+            getLog().info(format("unchanged: %d", report.unchangedFiles));
+          }
+        }
+      } );
+      settings.execute();
+    } catch (Exception e) {
+      throw new MojoFailureException(MiscUtil.causeMessages(e), e);
+    }
+  }
+
+  private static final class Report {
+    int changedFiles;
+    int unchangedFiles;
+    int newFiles;
+    Report(int changedFiles, int unchangedFiles, int newFiles) {
+      super();
+      this.changedFiles = changedFiles;
+      this.unchangedFiles = unchangedFiles;
+      this.newFiles = newFiles;
+    }
+    public Report() {
+      this(0, 0, 0);
+    }
+    void add(Report other) {
+      changedFiles += other.changedFiles;
+      unchangedFiles += other.unchangedFiles;
+      newFiles += other.newFiles;
+    }
+    public void addChanged() {
+      ++ changedFiles;
+    }
+    public void addNew() {
+      ++ newFiles;
+    }
+    public void addUnchanged() {
+      ++ unchangedFiles;
+    }
+  }
+
+  private Report moveIfChanged(File root, String tmpPath) throws MojoFailureException, IOException
{
+    Report report = new Report();
+    for (File file : root.listFiles()) {
+      if (file.isDirectory()) {
+        report.add(moveIfChanged(file, tmpPath));
+        if (!file.delete()) {
+          throw new MojoFailureException(format("can not delete %s", file));
+        }
+      } else {
+        String absPath = file.getAbsolutePath();
+        if (!absPath.startsWith(tmpPath)) {
+          throw new MojoFailureException(format("%s should start with %s", absPath, tmpPath));
+        }
+        String relPath = absPath.substring(tmpPath.length());
+        File outputFile = new File(output, relPath);
+        if (!outputFile.exists()) {
+          report.addNew();
+        } else if (!FileUtils.contentEquals(file, outputFile)) {
+          getLog().info(format("%s has changed", relPath));
+          if (!outputFile.delete()) {
+            throw new MojoFailureException(format("can not delete %s", outputFile));
+          }
+          report.addChanged();
+        } else {
+          report.addUnchanged();
+        }
+        if (!outputFile.exists()) {
+          File parentDir = outputFile.getParentFile();
+          if (parentDir.exists() && !parentDir.isDirectory()) {
+            throw new MojoFailureException(format("can not move %s to %s as %s is not a dir",
file, outputFile, parentDir));
+          }
+          if (!parentDir.exists() && !parentDir.mkdirs()) {
+            throw new MojoFailureException(format("can not move %s to %s as dir %s can not
be created", file, outputFile, parentDir));
+          }
+          FileUtils.moveFile(file, outputFile);
+        } else {
+          if (!file.delete()) {
+            throw new MojoFailureException(format("can not delete %s", file));
+          }
+        }
+      }
+    }
+    return report;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/dbcab0fe/tools/pom.xml
----------------------------------------------------------------------
diff --git a/tools/pom.xml b/tools/pom.xml
new file mode 100644
index 0000000..a45674c
--- /dev/null
+++ b/tools/pom.xml
@@ -0,0 +1,34 @@
+<?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 with
+ the License.  You may obtain a copy of the License at
+
+     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>
+  <parent>
+    <artifactId>drill-root</artifactId>
+    <groupId>org.apache.drill</groupId>
+    <version>1.3.0-SNAPSHOT</version>
+  </parent>
+
+  <groupId>org.apache.drill.tools</groupId>
+  <artifactId>tools-parent</artifactId>
+  <packaging>pom</packaging>
+  <name>tools/Parent Pom</name>
+
+  <modules>
+    <module>fmpp</module>
+  </modules>
+</project>


Mime
View raw message