diff --git a/.gitignore b/.gitignore
index b5b1ae8..0304fc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,32 +1,35 @@
-.project
-.buildpath
-.classpath
-.factorypath
-.checkstyle
-.settings/
-.idea/
-.mvn/maven.config
-TAGS
-*.log
-*.lck
-*.iml
-target/
-*.DS_Store
-*.patch
+# Please keep this list sorted.
 *~
-git.properties
-contrib/native/client/build/
-contrib/native/client/build/*
+.buildpath
+.checkstyle
+.classpath
 CMakeCache.txt
 CMakeFiles
-Makefile
 cmake_install.cmake
-install_manifest.txt
-.*.md.html
-*.swp
-# TODO - DRILL-4336
+contrib/native/client/build/
+contrib/native/client/build/*
+ # binary dist license is by the build
+distribution/src/main/resources/LICENSE
+*.DS_Store
 exec/jdbc-all/dependency-reduced-pom.xml
+.factorypath
+git.properties
 .*.html
-venv/
+.idea/
+*.iml
+install_manifest.txt
+*.lck
+*.log
+Makefile
+.*.md.html
+.mvn/maven.config
+*.patch
+.project
+.settings/
+*.swp
+TAGS
+target/
+# TODO - DRILL-4336
 tools/venv/
+venv/
 .vscode/*
diff --git a/header b/HEADER-2.0.txt
similarity index 100%
rename from header
rename to HEADER-2.0.txt
diff --git a/LICENSE b/LICENSE
index 077bcd8..d4d1638 100644
--- a/LICENSE
+++ b/LICENSE
@@ -202,10 +202,10 @@
    limitations under the License.
 
 ---------------------------------------------------------------------------
-This product includes source licensed under the MIT license
+This product includes source licensed under the MIT license.
 
 The source files are located at contrib/native/client/src/clientlib/y2038/
-in the source distribution. The four files carry this license are:
+in the source distribution. The files that carry this license are:
 time64.c
 time64.h
 time64_config.h
@@ -215,24 +215,11 @@
 
 This software originally derived from Paul Sheer's pivotal_gmtime_r.c.
 
-The MIT License:
+---------------------------------------------------------------------------
+This product includes source licensed under the BSD 3-clause license.
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+The source files are located at exec/java-exec/src/main/java/org/apache/drill/exec/compile/
+in the source distribution. The files that carry this license are:
+ClassBodyBuilder.java
 
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-
+Copyright (c) 2001-2010, Arno Unkrig
diff --git a/contrib/storage-phoenix/pom.xml b/contrib/storage-phoenix/pom.xml
index 038a35e..e21dd3a 100644
--- a/contrib/storage-phoenix/pom.xml
+++ b/contrib/storage-phoenix/pom.xml
@@ -205,7 +205,7 @@
     <dependency>
       <groupId>org.apache.kerby</groupId>
       <artifactId>kerb-core</artifactId>
-      <version>1.0.1</version>
+      <version>${kerby.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/distribution/pom.xml b/distribution/pom.xml
index c5c1d67..80ba965 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -203,23 +203,23 @@
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-tcnative</artifactId>
-      <version>2.0.48.Final</version>
+      <version>${netty.tcnative.version}</version>
       <classifier>linux-x86_64</classifier>
-      <scope>test</scope>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-tcnative</artifactId>
-      <version>2.0.48.Final</version>
+      <version>${netty.tcnative.version}</version>
       <classifier>linux-x86_64-fedora</classifier>
-      <scope>test</scope>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
       <artifactId>netty-tcnative</artifactId>
-      <version>2.0.48.Final</version>
+      <version>${netty.tcnative.version}</version>
       <classifier>osx-x86_64</classifier>
-      <scope>test</scope>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
@@ -228,7 +228,7 @@
       after 2.0.36, see https://repo1.maven.org/maven2/io/netty/netty-tcnative/ -->
       <version>2.0.36.Final</version>
       <classifier>windows-x86_64</classifier>
-      <scope>test</scope>
+      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>de.huxhorn.lilith</groupId>
@@ -289,6 +289,35 @@
           </excludes>
         </configuration>
       </plugin>
+      <plugin>
+        <!--
+        Invoke manually with mvn license:add-third-party to genereate the list
+        of binary dependency licenses src/main/resources/LICENSE.
+        -->
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>license-maven-plugin</artifactId>
+        <version>2.4.0</version>
+        <configuration>
+          <outputDirectory>src/main/resources</outputDirectory>
+          <thirdPartyFilename>LICENSE</thirdPartyFilename>
+          <excludedScopes>test,provided</excludedScopes>
+          <!-- Makes the scope exclusions above transitive. -->
+          <excludeTransitiveDependencies>true</excludeTransitiveDependencies>
+          <fileTemplate>${maven.multiModuleProjectDirectory}/distribution/src/main/resources/licenses/LICENSE-template.ftl</fileTemplate>
+          <missingFile>${maven.multiModuleProjectDirectory}/distribution/src/main/resources/licenses/MISSING.properties</missingFile>
+          <failOnMissing>true</failOnMissing>
+          <acceptPomPackaging>true</acceptPomPackaging>
+          <force>true</force>
+        </configuration>
+        <executions>
+          <execution>
+            <id>generate-binary-license</id>
+            <goals>
+              <goal>add-third-party</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <profiles>
diff --git a/distribution/src/assemble/component.xml b/distribution/src/assemble/component.xml
index ad84f6a..66792fd 100644
--- a/distribution/src/assemble/component.xml
+++ b/distribution/src/assemble/component.xml
@@ -123,7 +123,6 @@
         <include>org.jvnet.mimepull</include>
         <include>org.reflections</include>
       </includes>
-      <scope>test</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/3rdparty/</outputDirectory>
@@ -165,7 +164,6 @@
         <exclude>org.jvnet.mimepull</exclude>
         <exclude>org.reflections</exclude>
       </excludes>
-      <scope>test</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/ext</outputDirectory>
@@ -175,43 +173,39 @@
         <include>org.apache.zookeeper:zookeeper</include>
         <include>org.apache.zookeeper:zookeeper-jute</include>
       </includes>
-      <scope>runtime</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/3rdparty/linux</outputDirectory>
       <unpack>false</unpack>
       <useProjectArtifact>false</useProjectArtifact>
       <includes>
-        <include>io.netty:netty-tcnative:jar:linux-x86_64:2.0.48.Final</include>
+        <include>io.netty:netty-tcnative:jar:linux-x86_64:${netty.tcnative.version}</include>
       </includes>
-      <scope>test</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/3rdparty/fedora</outputDirectory>
       <unpack>false</unpack>
       <useProjectArtifact>false</useProjectArtifact>
       <includes>
-        <include>io.netty:netty-tcnative:jar:linux-x86_64-fedora:2.0.48.Final</include>
+        <include>io.netty:netty-tcnative:jar:linux-x86_64-fedora:${netty.tcnative.version}</include>
       </includes>
-      <scope>test</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/3rdparty/windows</outputDirectory>
       <unpack>false</unpack>
       <useProjectArtifact>false</useProjectArtifact>
       <includes>
+        <!-- 2.0.36.Final was last release of netty-tcnative to include a Windows binary -->
         <include>io.netty:netty-tcnative:jar:windows-x86_64:2.0.36.Final</include>
       </includes>
-      <scope>test</scope>
     </dependencySet>
     <dependencySet>
       <outputDirectory>jars/3rdparty/osx</outputDirectory>
       <unpack>false</unpack>
       <useProjectArtifact>false</useProjectArtifact>
       <includes>
-        <include>io.netty:netty-tcnative:jar:osx-x86_64:2.0.48.Final</include>
+        <include>io.netty:netty-tcnative:jar:osx-x86_64:${netty.tcnative.version}</include>
       </includes>
-      <scope>test</scope>
     </dependencySet>
   </dependencySets>
 
diff --git a/distribution/src/main/resources/LICENSE b/distribution/src/main/resources/LICENSE
deleted file mode 100644
index 6c5fa19..0000000
--- a/distribution/src/main/resources/LICENSE
+++ /dev/null
@@ -1,946 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed 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.
-
-================================================================================
-This product bundles
-
-  ANTLR ST4 4.0.4 (org.antlr:ST4:4.0.4 - http://www.stringtemplate.org)
-  ANTLR StringTemplate (org.antlr:stringtemplate:3.2.1 - http://www.stringtemplate.org)
-  AntLR Parser Generator (antlr:antlr:2.7.7 - http://www.antlr.org/)
-
-  which are available under the BSD license (http://opensource.org/licenses/BSD-3-Clause)
-
-  Copyright (c) 2012 Terence Parr and Sam Harwell
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without modification,
-  are permitted provided that the following conditions are met:
-
-    Redistributions of source code must retain the above copyright notice,
-    this list of conditions and the following disclaimer.
-
-    Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation and/or
-    other materials provided with the distribution.
-
-    Neither the name of the author nor the names of its contributors may be used to
-    endorse or promote products derived from this software without specific prior
-    written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-  SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  ASM Commons (org.ow2.asm:asm-commons:4.1 - http://asm.objectweb.org/asm-commons/)
-  ASM Core (org.ow2.asm:asm:4.1 - http://asm.objectweb.org/asm/)
-  ASM Tree (org.ow2.asm:asm-tree:4.1 - http://asm.objectweb.org/asm-tree/)
-  ASM Util (org.ow2.asm:asm-util:4.1 - http://asm.objectweb.org/asm-util/)
-
-  which are available under the BSD license (http://opensource.org/licenses/BSD-3-Clause)
-
-  Copyright (c) 2000-2005 INRIA, France Telecom
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-  1. Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-  3. Neither the name of the copyright holders nor the names of its
-     contributors may be used to endorse or promote products derived from
-     this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-  THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  Javolution (javolution:javolution:5.5.1 - http://javolution.org)
-
-  which is available under the BSD license (http://opensource.org/licenses/BSD-2-Clause)
-
-  Javolution - Java(tm) Solution for Real-Time and Embedded Systems
-  Copyright (c) 2012, Javolution (http://javolution.org/)
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-     1. Redistributions of source code must retain the above copyright
-        notice, this list of conditions and the following disclaimer.
-
-     2. Redistributions in binary form must reproduce the above copyright
-        notice, this list of conditions and the following disclaimer in the
-        documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.3 - http://paranamer.codehaus.org/paranamer)
-  ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.5.6 - http://paranamer.codehaus.org/paranamer)
-
-  which are available under the BSD license (http://opensource.org/licenses/BSD-3-Clause)
-
-  Copyright (c) 2006 Paul Hammant & ThoughtWorks Inc
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-    1. Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-   THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  FreeMarker (org.freemarker:freemarker:2.3.19 - http://freemarker.org)
-
-  which is available under the BSD license (http://opensource.org/licenses/BSD-3-Clause)
-
-  Copyright (c) 2003 The Visigoth Software Society. All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-  1.  Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-  2.  The end-user documentation included with the redistribution, if any, must
-      include the following acknowlegement:
-        "This product includes software developed by the
-        Visigoth Software Society (http://www.visigoths.org/)."
-      Alternately, this acknowlegement may appear in the software itself, if and
-      wherever such third-party acknowlegements normally appear.
-
-  3.  Neither the name "FreeMarker", "Visigoth", nor any of the names of the
-      project contributors may be used to endorse or promote products derived
-      from this software without prior written permission. For written
-      permission, please contact visigoths@visigoths.org.
-
-  4.  Products derived from this software may not be called "FreeMarker" or
-      "Visigoth" nor may "FreeMarker" or "Visigoth" appear in their names
-      without prior written permission of the Visigoth Software Society.
-
-  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-  VISIGOTH SOFTWARE SOCIETY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
-  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  Hamcrest Core (org.hamcrest:hamcrest-core:1.3 - https://github.com/hamcrest/JavaHamcrest/hamcrest-core)
-
-  which is available under the BSD license (http://opensource.org/licenses/BSD-3-Clause)
-
-  Copyright (c) 2000-2006, www.hamcrest.org
-  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    Redistributions of source code must retain the above copyright notice, this list of
-    conditions and the following disclaimer. Redistributions in binary form must reproduce
-    the above copyright notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the distribution.
-
-    Neither the name of Hamcrest nor the names of its contributors may be used to endorse
-    or promote products derived from this software without specific prior written
-    permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-  SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
-  WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-  DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  HSQLDB (hsqldb:hsqldb:1.8.0.10 - http://hsqldb.org/)
-
-  which is available under the BSD license (http://hsqldb.org/web/hsqlLicense.html)
-
-  Copyright (c) 2001-2010, The HSQL Development Group
-  All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-
-    Redistributions of source code must retain the above copyright notice, this
-    list of conditions and the following disclaimer.
-
-    Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation
-    and/or other materials provided with the distribution.
-
-    Neither the name of the HSQL Development Group nor the names of its
-    contributors may be used to endorse or promote products derived from this
-    software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
-  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  dom4j (dom4j:dom4j:1.6.1 - http://dom4j.org)
-
-  which is available under the BSD license (http://dom4j.sourceforge.net/dom4j-1.6.1/license.html)
-
-  Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
-
-  Redistribution and use of this software and associated documentation ("Software"),
-  with or without modification, are permitted provided that the following conditions are met:
-
-    Redistributions of source code must retain copyright statements and
-    notices. Redistributions must also contain a copy of this document.
-
-    Redistributions in binary form must reproduce the above copyright notice,
-    this list of conditions and the following disclaimer in the documentation and/or
-    other materials provided with the distribution.
-
-    The name "DOM4J" must not be used to endorse or promote products derived
-    from this Software without prior written permission of MetaStuff, Ltd.
-    For written permission, please contact dom4j-info@metastuff.com.
-
-    Products derived from this Software may not be called "DOM4J" nor may "DOM4J" appear
-    in their names without prior written permission of MetaStuff, Ltd. DOM4J is a registered
-    trademark of MetaStuff, Ltd.
-
-    Due credit should be given to the DOM4J Project - http://dom4j.sourceforge.net
-
-  THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED
-  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS
-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
-  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  JLine (jline:jline:0.9.94 - http://jline.sourceforge.net)
-  JLine (jline:jline:2.10 - http://nexus.sonatype.org/oss-repository-hosting.html/jline)
-
-  which is available under the BSD license (http://jline.sourceforge.net/license.html)
-
-  Copyright (c) 2002-2006, Marc Prud'hommeaux <mwp1@cornell.edu>
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or
-  without modification, are permitted provided that the following
-  conditions are met:
-
-    Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-
-    Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer
-    in the documentation and/or other materials provided with
-    the distribution.
-
-    Neither the name of JLine nor the names of its contributors
-    may be used to endorse or promote products derived from this
-    software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-  BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-  EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-  OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  Commons Compiler Jdk (org.codehaus.janino:commons-compiler-jdk:2.7.4 - http://docs.codehaus.org/display/JANINO/Home/commons-compiler-jdk)
-  Janino (org.codehaus.janino:janino:2.6.1 - http://docs.codehaus.org/display/JANINO/Home/janino)
-  Janino (org.codehaus.janino:janino:2.7.4 - http://docs.codehaus.org/display/JANINO/Home/janino)
-  Janino (org.codehaus.janino:janino:2.7.3 - no url defined)
-  commons-compiler (org.codehaus.janino:commons-compiler:2.7.3 - no url defined)
-
-  which are available under the BSD license (http://dist.codehaus.org/janino/new_bsd_license.txt)
-
-  Copyright (c) 2001-2010, Arno Unkrig
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions
-  are met:
-
-     1. Redistributions of source code must retain the above copyright
-        notice, this list of conditions and the following disclaimer.
-     2. Redistributions in binary form must reproduce the above
-        copyright notice, this list of conditions and the following
-        disclaimer in the documentation and/or other materials
-        provided with the distribution.
-     3. The name of the author may not be used to endorse or promote
-        products derived from this software without specific prior
-        written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---------------------------------------------------------------------------------
-This product bundles
-
-  Protocol Buffer Java API (com.google.protobuf:protobuf-java:2.5.0 - http://code.google.com/p/protobuf)
-
-  which is available under the BSD license
-
-  Copyright 2008, Google Inc.
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are
-  met:
-
-      * Redistributions of source code must retain the above copyright
-  notice, this list of conditions and the following disclaimer.
-      * Redistributions in binary form must reproduce the above
-  copyright notice, this list of conditions and the following disclaimer
-  in the documentation and/or other materials provided with the
-  distribution.
-      * Neither the name of Google Inc. nor the names of its
-  contributors may be used to endorse or promote products derived from
-  this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-  Code generated by the Protocol Buffer compiler is owned by the owner
-  of the input file used when generating it.  This code is not
-  standalone and requires a support library to be linked with it.  This
-  support library is itself covered by the above license.
---------------------------------------------------------------------------------
-This product bundles
-
-  sqlline (sqlline:sqlline:1.1.6 - http://github.com/julianhyde/sqlline)
-
-  which is available under the BSD license (http://opensource.org/licenses/BSD-2-Clause)
-
---------------------------------------------------------------------------------
-This product bundles
-
-  aopalliance version 1.0 repackaged as a module (org.glassfish.hk2.external:aopalliance-repackaged:2.2.0 - https://hk2.java.net/external/aopalliance-repackaged)
-  Glassfish Jasper (org.mortbay.jetty:jsp-2.1:6.1.14 - http://jetty.mortbay.org/project/modules/jsp-2.1)
-  HK2 API module (org.glassfish.hk2:hk2-api:2.2.0 - https://hk2.java.net/hk2-api)
-  HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.2.0 - https://hk2.java.net/hk2-utils)
-  Injection API (JSR 330) version 1 repackaged as OSGi bundle (org.glassfish.hk2.external:javax.inject:2.2.0 - https://hk2.java.net/external/javax.inject)
-  Java Servlet API (javax.servlet:javax.servlet-api:3.1.0 - http://servlet-spec.java.net)
-  Java Transaction API (org.jboss.spec.javax.transaction:jboss-transaction-api_1.1_spec:1.0.1.Final - http://www.jboss.org/jboss-transaction-api_1.1_spec)
-  JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
-  javax.annotation API (javax.annotation:javax.annotation-api:1.2 - http://jcp.org/en/jsr/detail?id=250)
-  jersey-container-jetty-http (org.glassfish.jersey.containers:jersey-container-jetty-http:2.8 - https://jersey.java.net/project/jersey-container-jetty-http/)
-  jersey-container-jetty-servlet (org.glassfish.jersey.containers:jersey-container-jetty-servlet:2.8 - https://jersey.java.net/project/jersey-container-jetty-servlet/)
-  jersey-container-servlet (org.glassfish.jersey.containers:jersey-container-servlet:2.8 - https://jersey.java.net/project/jersey-container-servlet/)
-  jersey-container-servlet-core (org.glassfish.jersey.containers:jersey-container-servlet-core:2.8 - https://jersey.java.net/project/jersey-container-servlet-core/)
-  jersey-core-client (org.glassfish.jersey.core:jersey-client:2.8 - https://jersey.java.net/jersey-client/)
-  jersey-core-common (org.glassfish.jersey.core:jersey-common:2.8 - https://jersey.java.net/jersey-common/)
-  jersey-core-server (org.glassfish.jersey.core:jersey-server:2.8 - https://jersey.java.net/jersey-server/)
-  jersey-ext-mvc (org.glassfish.jersey.ext:jersey-mvc:2.8 - https://jersey.java.net/project/jersey-mvc/)
-  jersey-ext-mvc-freemarker (org.glassfish.jersey.ext:jersey-mvc-freemarker:2.8 - https://jersey.java.net/project/jersey-mvc-freemarker/)
-  jersey-media-multipart (org.glassfish.jersey.media:jersey-media-multipart:2.8 - https://jersey.java.net/project/jersey-media-multipart/)
-  OSGi resource locator bundle - used by various API providers that rely on META-INF/services mechanism to locate providers. (org.glassfish.hk2:osgi-resource-locator:1.0.1 - http://glassfish.org/osgi-resource-locator/)
-  ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.2.0 - https://hk2.java.net/hk2-locator)
-  servlet-api (javax.servlet:servlet-api:2.4 - no url defined)
-
-  which are available under the CDDL v1.0 license (https://glassfish.java.net/public/CDDLv1.0.text)
-
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-
-1. Definitions.
-
-1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
-
-1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
-
-1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
-
-1.4. Executable means the Covered Software in any form other than Source Code.
-
-1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
-
-1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
-
-1.7. License means this document.
-
-1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
-
-1.9. Modifications means the Source Code and Executable form of any of the following:
-
-A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
-
-B. Any new file that contains any part of the Original Software or previous Modification; or
-
-C. Any new file that is contributed or otherwise made available under the terms of this License.
-
-1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
-
-1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
-
-1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
-
-1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
-
-2. License Grants.
-
-2.1. The Initial Developer Grant.
-Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
-(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
-(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
-(c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
-(d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
-
-2.2. Contributor Grant.
-Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
-(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
-(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
-(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
-(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
-
-3. Distribution Obligations.
-
-3.1. Availability of Source Code.
-
-Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
-
-3.2. Modifications.
-
-The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
-
-3.3. Required Notices.
-You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
-
-3.4. Application of Additional Terms.
-You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
-
-3.5. Distribution of Executable Versions.
-You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
-
-3.6. Larger Works.
-You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
-
-4. Versions of the License.
-
-4.1. New Versions.
-Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
-
-4.2. Effect of New Versions.
-
-You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
-4.3. Modified Versions.
-
-When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
-
-5. DISCLAIMER OF WARRANTY.
-
-COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-6. TERMINATION.
-
-6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
-
-6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
-
-6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
-
-7. LIMITATION OF LIABILITY.
-
-UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-8. U.S. GOVERNMENT END USERS.
-
-The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R.  252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
-
-9. MISCELLANEOUS.
-
-This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
-
-10. RESPONSIBILITY FOR CLAIMS.
-
-As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
-
-NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
-The GlassFish code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. 
---------------------------------------------------------------------------------
-This product bundles
-
-  javax.ws.rs-api (javax.ws.rs:javax.ws.rs-api:2.0 - http://jax-rs-spec.java.net)
-  JAXB RI (com.sun.xml.bind:jaxb-impl:2.2.3-1 - http://jaxb.java.net/)
-  jersey-core (com.sun.jersey:jersey-core:1.8 - https://jersey.dev.java.net/jersey-core/)
-  jersey-json (com.sun.jersey:jersey-json:1.8 - https://jersey.dev.java.net/jersey-json/)
-  jersey-server (com.sun.jersey:jersey-server:1.8 - https://jersey.dev.java.net/jersey-server/)
-  MIME streaming extension (org.jvnet.mimepull:mimepull:1.9.3 - http://mimepull.java.net)
-  Codemodel Core (com.sun.codemodel:codemodel:2.6 - http://codemodel.java.net/codemodel/)
-  jaxb-api (javax.xml.bind:jaxb-api:2.1 - no url defined)
-
-  which are available under the CDDL v1.1 license (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
---------------------------------------------------------------------------------
-This product bundles
-
-  JRuby Complete (org.jruby:jruby-complete:1.6.5 - http://www.jruby.org/jruby-common/jruby-complete/)
-  Logback Classic Module (ch.qos.logback:logback-classic:1.0.13 - http://logback.qos.ch)
-  Logback Core Module (ch.qos.logback:logback-core:1.0.13 - http://logback.qos.ch)
-  core (org.eclipse.jdt:core:3.1.1 - no url defined)
-  Highly Scalable Java (com.github.stephenc.high-scale-lib:high-scale-lib:1.1.1 - http://nexus.sonatype.org/oss-repository-hosting.html/high-scale-lib-parent/high-scale-lib)
-
-  which are available under the EPL 1.0 license (http://opensource.org/licenses/eclipse-1.0.php)
---------------------------------------------------------------------------------
-This product bundles
-
-  Bootstrap (http://getbootstrap.com)
-
-  which is available under the MIT license (https://github.com/twbs/bootstrap/blob/master/LICENSE)
-
-  The MIT License (MIT)
-
-  Copyright (c) 2011-2014 Twitter, Inc
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in
-  all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  THE SOFTWARE.
---------------------------------------------------------------------------------
-This product includes
-
-  jQuery (https://jquery.org)
-
-  which is available under the MIT license (https://github.com/jquery/jquery/blob/master/LICENSE.txt)
-
-  Copyright 2005, 2014 jQuery Foundation and other contributors,
-  https://jquery.org/
-
-  Permission is hereby granted, free of charge, to any person obtaining
-  a copy of this software and associated documentation files (the
-  "Software"), to deal in the Software without restriction, including
-  without limitation the rights to use, copy, modify, merge, publish,
-  distribute, sublicense, and/or sell copies of the Software, and to
-  permit persons to whom the Software is furnished to do so, subject to
-  the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---------------------------------------------------------------------------------
-This product bundles
-  jQuery Form Plugin (http://malsup.github.io/jquery.form.js)
-
-  which is available under the MIT license (http://malsup.github.io/mit-license.txt)
-
-  Copyright 2006-2013 (c) M. Alsup
-
-  Permission is hereby granted, free of charge, to any person obtaining
-  a copy of this software and associated documentation files (the
-  "Software"), to deal in the Software without restriction, including
-  without limitation the rights to use, copy, modify, merge, publish,
-  distribute, sublicense, and/or sell copies of the Software, and to
-  permit persons to whom the Software is furnished to do so, subject to
-  the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---------------------------------------------------------------------------------å
-This product bundles
-
-  JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.5 - http://www.slf4j.org)
-  JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.5 - http://www.slf4j.org)
-  SLF4J API Module (org.slf4j:slf4j-api:1.7.5 - http://www.slf4j.org)
-
-  which are available under the MIT license (http://opensource.org/licenses/mit-license.php)
-
-  Copyright (c) 2004-2008 QOS.ch
-  All rights reserved.
-
-  Permission is hereby granted, free of charge, to any person obtaining
-  a copy of this software and associated documentation files (the
-  "Software"), to deal in the Software without restriction, including
-  without limitation the rights to use, copy, modify, merge, publish,
-  distribute, sublicense, and/or sell copies of the Software, and to
-  permit persons to whom the Software is furnished to do so, subject to
-  the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------------
-This product bundles
-
-  xmlenc Library (xmlenc:xmlenc:0.52 - http://xmlenc.sourceforge.net)
-
-  which is available under the MIT license (http://opensource.org/licenses/mit-license.php)
-
-  Copyright (c) 2013 Benoist
-
-  Permission is hereby granted, free of charge, to any person obtaining
-  a copy of this software and associated documentation files (the
-  "Software"), to deal in the Software without restriction, including
-  without limitation the rights to use, copy, modify, merge, publish,
-  distribute, sublicense, and/or sell copies of the Software, and to
-  permit persons to whom the Software is furnished to do so, subject to
-  the following conditions:
-
-  The above copyright notice and this permission notice shall be
-  included in all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
---------------------------------------------------------------------------------
-This product bundles jamon-runtime (org.jamon:jamon-runtime:2.3.1 - http://www.jamon.org/jamon-runtime/)
-
-  which is available under the MPL v1.1 license (http://opensource.org/licenses/mozilla1.1.php)
---------------------------------------------------------------------------------
-This product bundles Reflections (org.reflections:reflections:0.9.8 - http://code.google.com/p/reflections/)
-
-  which is available under the WTFPL license (http://en.wikipedia.org/wiki/WTFPL)
-
-Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
-
- Everyone is permitted to copy and distribute verbatim or modified
- copies of this license document, and changing it is allowed as long
- as the name is changed.
-
-            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. You just DO WHAT THE FUCK YOU WANT TO.
---------------------------------------------------------------------------------
-The following libraries are from the public domain.
-
-  XZ for Java (org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html)
-================================================================================
diff --git a/distribution/src/main/resources/licenses/LICENSE-base.txt b/distribution/src/main/resources/licenses/LICENSE-base.txt
new file mode 100644
index 0000000..d5b3b6d
--- /dev/null
+++ b/distribution/src/main/resources/licenses/LICENSE-base.txt
@@ -0,0 +1,236 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
+================================================================================
+
+This product bundles
+
+  Bootstrap (http://getbootstrap.com)
+
+  which is available under the MIT license (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+
+  The MIT License (MIT)
+
+  Copyright (c) 2011-2014 Twitter, Inc
+
+--------------------------------------------------------------------------------
+
+This product includes
+
+  jQuery (https://jquery.org)
+
+  which is available under the MIT license (https://github.com/jquery/jquery/blob/master/LICENSE.txt)
+
+  Copyright 2005, 2014 jQuery Foundation and other contributors,
+  https://jquery.org/
+
+--------------------------------------------------------------------------------
+
+This product bundles
+  jQuery Form Plugin (http://malsup.github.io/jquery.form.js)
+
+  which is available under the MIT license (http://malsup.github.io/mit-license.txt)
+
+  Copyright 2006-2013 (c) M. Alsup
+
+================================================================================
diff --git a/distribution/src/main/resources/licenses/LICENSE-template.ftl b/distribution/src/main/resources/licenses/LICENSE-template.ftl
new file mode 100644
index 0000000..a33e3b6
--- /dev/null
+++ b/distribution/src/main/resources/licenses/LICENSE-template.ftl
@@ -0,0 +1,63 @@
+<#--
+    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.
+-->
+
+<#--
+  Combines the the source LICENSE with dependency licenses to generate
+  the binary dist LICENSE.
+-->
+
+<#--
+ Available context :
+
+ - dependencyMap a collection of Map.Entry with
+   key are dependencies (as a MavenProject) (from the maven project)
+   values are licenses of each dependency (array of string)
+
+ - licenseMap a collection of Map.Entry with
+   key are licenses of each dependency (array of string)
+   values are all dependencies using this license
+-->
+
+<#include "LICENSE-base.txt">
+
+<#function licenseFormat licenses>
+    <#assign result = ""/>
+    <#list licenses as license>
+        <#assign result = result + "[" +license + "]"/>
+    </#list>
+    <#return result>
+</#function>
+<#function artifactFormat p>
+    <#if p.name?index_of('Unnamed') &gt; -1>
+        <#return p.artifactId + " (" + p.groupId + ":" + p.artifactId + ":" + p.version + " - " + (p.url!"no url defined") + ")">
+    <#else>
+        <#return p.name + " (" + p.groupId + ":" + p.artifactId + ":" + p.version + " - " + (p.url!"no url defined") + ")">
+    </#if>
+</#function>
+
+<#if dependencyMap?size == 0>
+The project has no dependencies.
+<#else>
+This product bundles the following (report generated by license-maven-plugin).
+
+    <#list dependencyMap as e>
+        <#assign project = e.getKey()/>
+        <#assign licenses = e.getValue()/>
+    ${artifactFormat(project)} ${licenseFormat(licenses)}
+    </#list>
+</#if>
diff --git a/distribution/src/main/resources/licenses/MISSING.properties b/distribution/src/main/resources/licenses/MISSING.properties
new file mode 100644
index 0000000..9b2c224
--- /dev/null
+++ b/distribution/src/main/resources/licenses/MISSING.properties
@@ -0,0 +1,28 @@
+#
+# 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.
+#
+
+com.splunk--splunk--1.9.3=Apache 2.0
+io.confluent--common-utils--6.1.1=Apache 2.0
+io.confluent--kafka-avro-serializer--6.1.1=Apache 2.0
+io.confluent--kafka-schema-serializer--6.1.1=Apache 2.0
+io.netty--netty-tcnative--2.0.36.Final=Apache 2.0
+javax.servlet.jsp--jsp-api--2.1=CDDL v1.1 | GPL v2
+javax.transaction--jta--1.1=CDDL v1.1 | GPL v2
+javax.transaction--transaction-api--1.1=CDDL v1.1 | GPL v2
+org.sonatype.spice--model-builder--1.3=Apache 2.0
+oro--oro--2.0.8=Apache 2.0
diff --git a/docs/dev/Environment.md b/docs/dev/Environment.md
index fb594d8..df37df4 100644
--- a/docs/dev/Environment.md
+++ b/docs/dev/Environment.md
@@ -2,7 +2,7 @@
 
 ## Prerequisites
 
-Currently, the Apache Drill build process is known to work on Linux, Windows and OSX.  To build, you need to have the following software installed on your system to successfully complete a build. 
+Currently, the Apache Drill build process is known to work on Linux, Windows and OSX.  To build, you need to have the following software installed on your system to successfully complete a build.
   * Java 8
   * Maven 3.6.3 or greater
 
@@ -31,37 +31,38 @@
 ## Checkout
 
     git clone https://github.com/apache/drill.git
-    
+
 ## Build
 
     cd drill
     mvn clean install -DskipTests
 
 ## Build Quickly
-This command works to build Drill in about 2 minutes for quick testing. 
+This command works to build Drill in about 2 minutes for quick testing. The `-o` (offline) argument
+prevents Maven from downloading snapshot artifacts from the snapshot repo.
 
-    mvn install -T 4 -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dlicense.skip=true -Dcheckstyle.skip=true -Dfindbugs.skip=true -Dmaven.site.skip=true -Denforcer.skip=true -DskipIfEmpty=true -Dmaven.compiler.optimize=true
+    mvn install -o -T1C -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dlicense.skip=true -Dcheckstyle.skip=true -Dfindbugs.skip=true -Dmaven.site.skip=true -Denforcer.skip=true -DskipIfEmpty=true -Dmaven.compiler.optimize=true
 
 ## Generate Dependency Report
     mvn clean site
 
 ## Explode tarball in installation directory
-   
+
     mkdir /opt/drill
-    tar xvzf distribution/target/*.tar.gz --strip=1 -C /opt/drill 
+    tar xvzf distribution/target/*.tar.gz --strip=1 -C /opt/drill
 
 ## Start SQLLine (which starts Drill in embedded mode)
-    
+
     cd /opt/drill
     bin/sqlline -u jdbc:drill:zk=local -n admin -p admin
 
 ## Run a query
 
-    SELECT 
-      employee_id, 
+    SELECT
+      employee_id,
       first_name
-    FROM cp.`employee.json`; 
-    
-## More information 
+    FROM cp.`employee.json`;
+
+## More information
 
 For more information including how to run a Apache Drill cluster, visit the [Apache Drill Documentation](http://drill.apache.org/docs/)
diff --git a/docs/dev/LicenseHeaders.md b/docs/dev/LicenseHeaders.md
deleted file mode 100644
index b39306f..0000000
--- a/docs/dev/LicenseHeaders.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# License Headers
-
-Drill uses two license header checkers:
-
-* [Apache RAT Plugin](http://creadur.apache.org/rat/apache-rat-plugin/)
-* [License Maven Plugin](http://code.mycila.com/license-maven-plugin/)
-
-## Why Two?
-
-[Apache RAT Plugin](http://creadur.apache.org/rat/apache-rat-plugin/) is used because it is the standard license header
-checker for Apache projects. 
-
-[License Maven Plugin](http://code.mycila.com/license-maven-plugin/) performs stricter license checks and supports disallowing license headers wrapped in `/**` and `**/`. This
-allows us to inforce requiring all license headers to be wrapped only in `/*` and `*/`.
-
-## Doing License Checks
-
-The license checks are disabled locally by default and are enabled on Github Actions. If you'd like to perform
-license checks locally you can do the following:
-
-```
- mvn license:check -Dlicense.skip=false
-```
-
-## Auto Formatting Headers
-
-If the license checks fail and you can't figure out what's wrong with your headers, you can auto-format
-your license headers with the following command:
-
-```
-mvn license:format -Dlicense.skip=false
-```
-
-This command will also add license headers to files without them.
diff --git a/docs/dev/LicenseHeadersAndNotices.md b/docs/dev/LicenseHeadersAndNotices.md
new file mode 100644
index 0000000..ce871d5
--- /dev/null
+++ b/docs/dev/LicenseHeadersAndNotices.md
@@ -0,0 +1,45 @@
+# License headers and notices
+
+Drill uses the standadrd Apache license header checker:
+
+* [Apache RAT Plugin](http://creadur.apache.org/rat/apache-rat-plugin/)
+
+## Doing license header checks
+
+The license checks are enabled by default, bound to the `validate` build
+phase. They can be disabled using the Maven argumment `-Drat.skip=true`. RAT
+will accept a license header appearing in a Javadoc comment (which opens with
+`/**`) but these result in noise the generated Javadoc HTML. Any instances
+of such headers can be found using a pattern, e.g.
+
+```sh
+grep -Pzo '/\*\*\n \* Licensed to the Apache Software Foundation' **/*.java
+```
+
+and corrected by replacing the opening `/**` with `/*`.
+
+## Auto formatting license headers
+
+The Maven build does not do automatic insertion of license headers to
+avoid mislicensing code under other open source licenses that may have been
+brought into the Drill codebase with the exception of generated code (see
+the protocol module).
+
+## Generating the binary distribution LICENSE
+
+Drill makes use of org.codehaus.mojo:license-maven-plugin to
+generate the LICENSE file bundled with its binary distribution
+(distribution/src/main/resources/LICENSE). This plugin binds to
+the generate-resources build phase and combines undetectable license
+notices that are manually maintained in a base Freemarket template (see
+distribution/src/main/resources/licenses/) with autodetected license
+notices. It can be run manually as follows.
+
+```sh
+cd distribution
+mvn license:add-third-party
+```
+
+If a depdedency that the plugin cannot lookup a license for has been introduced
+then it will fail with an instruction to add determine the license manually
+and add it to the MISSING.properties file.
diff --git a/exec/java-exec/pom.xml b/exec/java-exec/pom.xml
index fc61697..8c1819c 100644
--- a/exec/java-exec/pom.xml
+++ b/exec/java-exec/pom.xml
@@ -552,6 +552,7 @@
       <groupId>io.netty</groupId>
       <artifactId>netty-tcnative</artifactId>
       <classifier>${netty.tcnative.classifier}</classifier>
+      <version>${netty.tcnative.version}</version>
     </dependency>
     <dependency>
       <groupId>io.netty</groupId>
diff --git a/exec/jdbc-all/pom.xml b/exec/jdbc-all/pom.xml
index 573853b..909954a 100644
--- a/exec/jdbc-all/pom.xml
+++ b/exec/jdbc-all/pom.xml
@@ -67,13 +67,13 @@
       <version>${project.version}</version>
       <exclusions>
         <exclusion>
-          <artifactId>javassist</artifactId>
-          <groupId>javassist</groupId>
-        </exclusion>
-        <exclusion>
           <groupId>io.dropwizard.metrics</groupId>
           <artifactId>metrics-servlets</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.eclipse.jetty</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
 
@@ -135,7 +135,7 @@
           <artifactId>jersey-hk2</artifactId>
         </exclusion>
         <exclusion>
-          <artifactId>jetty-server</artifactId>
+          <artifactId>*</artifactId>
           <groupId>org.eclipse.jetty</groupId>
         </exclusion>
         <exclusion>
@@ -147,10 +147,6 @@
           <artifactId>avro-mapred</artifactId>
         </exclusion>
         <exclusion>
-          <artifactId>jetty-servlet</artifactId>
-          <groupId>org.eclipse.jetty</groupId>
-        </exclusion>
-        <exclusion>
           <artifactId>parquet-hadoop</artifactId>
           <groupId>org.apache.parquet</groupId>
         </exclusion>
@@ -282,6 +278,30 @@
           <groupId>net.sf.jpam</groupId>
           <artifactId>jpam</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>com.beust</groupId>
+          <artifactId>jcommander</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.janino</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.thoughtworks.paranamer</groupId>
+          <artifactId>paranamer</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>javax.servlet</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>javax.servlet.jsp</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.kerby</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
     <dependency>
@@ -404,6 +424,7 @@
               <include>*:*</include>
             </includes>
             <excludes>
+              <!-- Please keep this list sorted. -->
               <exclude>antlr:*</exclude>
               <exclude>com.beust:*</exclude>
               <exclude>com.dropbox.*</exclude>
@@ -429,7 +450,6 @@
               <exclude>jline:*</exclude>
               <exclude>net.hydromatic:linq4j</exclude>
               <exclude>org.apache.avro:*</exclude>
-              <exclude>org.apache.avro:*</exclude>
               <exclude>org.apache.commons:commons-collections4</exclude>
               <exclude>org.apache.hadoop:hadoop-yarn-client</exclude>
               <exclude>org.apache.parquet:*</exclude>
diff --git a/pom.xml b/pom.xml
index 70cb66b..7903d66 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
-    <version>29</version>
+    <version>31</version>
     <relativePath />
   </parent>
 
@@ -36,103 +36,116 @@
   <name>Drill :</name>
   <description>Apache Drill is an open source, low latency SQL query engine for Hadoop and NoSQL.</description>
   <url>https://drill.apache.org/</url>
+  <organization>
+    <name>Apache Software Foundation</name>
+    <url>https://www.apache.org</url>
+  </organization>
+  <licenses>
+    <license>
+      <name>Apache-2.0</name>
+      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+    </license>
+  </licenses>
 
   <properties>
-    <maven.compiler.source>1.8</maven.compiler.source>
-    <maven.compiler.target>1.8</maven.compiler.target>
-    <sourceReleaseAssemblyDescriptor>source-release-zip-tar</sourceReleaseAssemblyDescriptor>
-    <project.build.outputTimestamp>1676438963</project.build.outputTimestamp>
-    <target.gen.source.path>${project.basedir}/target/generated-sources</target.gen.source.path>
-    <proto.cas.path>${project.basedir}/src/main/protobuf/</proto.cas.path>
-    <junit.version>5.7.2</junit.version>
-    <junit4.version>4.13.2</junit4.version>
-    <junit.platform.version>1.8.2</junit.platform.version>
-    <slf4j.version>2.0.6</slf4j.version>
-    <guava.version>32.1.2-jre</guava.version>
-    <forkCount>1</forkCount>
-    <parquet.version>1.12.3</parquet.version>
-    <parquet.format.version>2.9.0</parquet.format.version>
+    <!-- Please keep this list sorted. -->
+    <aircompressor.version>0.25</aircompressor.version>
+    <antlr.version>4.9.3</antlr.version>
+    <asm.version>9.5</asm.version>
+    <avatica.version>1.23.0</avatica.version>
+    <avro.version>1.11.3</avro.version>
+    <bouncycastle.version>1.77</bouncycastle.version>
     <calcite.groupId>org.apache.calcite</calcite.groupId>
     <calcite.version>1.34.0</calcite.version>
-    <avatica.version>1.23.0</avatica.version>
-    <janino.version>3.1.11</janino.version>
-    <sqlline.version>1.12.0</sqlline.version>
-    <jackson.version>2.16.1</jackson.version>
-    <zookeeper.version>3.5.10</zookeeper.version>
-    <kerby.version>1.0.0</kerby.version>
-    <findbugs.version>3.0.5</findbugs.version>
-    <netty.tcnative.classifier />
-    <commons.io.version>2.15.0</commons.io.version>
+    <codemodel.version>2.6</codemodel.version>
+    <commons.beanutils.version>1.9.4</commons.beanutils.version>
+    <commons.cli.version>1.4</commons.cli.version>
+    <commons.codec.version>1.16.0</commons.codec.version>
     <commons.collections.version>4.4</commons.collections.version>
-    <hamcrest.version>2.2</hamcrest.version>
+    <commons.compress.version>1.25.0</commons.compress.version>
+    <commons.configuration.version>1.10</commons.configuration.version>
+    <commons.io.version>2.15.0</commons.io.version>
+    <commons.lang3.version>3.10</commons.lang3.version>
+    <commons.net.version>3.9.0</commons.net.version>
+    <commons.text.version>1.10.0</commons.text.version>
+    <commons.validator.version>1.7</commons.validator.version>
     <curator.version>5.5.0</curator.version>
-    <wiremock.standalone.version>2.23.2</wiremock.standalone.version>
-    <jmockit.version>1.47</jmockit.version>
-    <logback.version>1.3.14</logback.version>
-    <mockito.version>3.11.2</mockito.version>
+    <derby.version>10.14.2.0</derby.version>
+    <directMemoryMb>3072</directMemoryMb>
+    <docker.repository>apache/drill</docker.repository>
+    <excludedGroups />
+    <findbugs.version>3.0.5</findbugs.version>
+    <fmpp.version>1.0</fmpp.version>
+    <forkCount>1</forkCount>
+    <freemarker.version>2.3.30</freemarker.version>
+    <guava.version>32.1.2-jre</guava.version>
+    <hadoop.version>3.3.6</hadoop.version>
+    <hamcrest.version>2.2</hamcrest.version>
+    <hbase.version>2.5.5-hadoop3</hbase.version>
+    <hikari.version>4.0.3</hikari.version>
     <!--
       Currently, Hive storage plugin only supports Apache Hive 3.1.3 or vendor specific variants of the
       Apache Hive 2.3.2. If the version is changed, make sure the jars and their dependencies are updated,
       for example parquet-hadoop-bundle and derby dependencies.
     -->
     <hive.version>3.1.3</hive.version>
-    <hadoop.version>3.3.6</hadoop.version>
-    <hbase.version>2.5.5-hadoop3</hbase.version>
-    <fmpp.version>1.0</fmpp.version>
-    <freemarker.version>2.3.30</freemarker.version>
-    <javassist.version>3.29.2-GA</javassist.version>
-    <msgpack.version>0.6.6</msgpack.version>
-    <reflections.version>0.9.10</reflections.version>
-    <avro.version>1.11.3</avro.version>
-    <bouncycastle.version>1.77</bouncycastle.version>
-    <metrics.version>4.2.19</metrics.version>
-    <jetty.version>9.4.51.v20230217</jetty.version>
-    <jersey.version>2.40</jersey.version>
-    <javax.validation.api>2.0.1.Final</javax.validation.api>
-    <asm.version>9.5</asm.version>
-    <excludedGroups />
-    <memoryMb>3072</memoryMb>
-    <directMemoryMb>3072</directMemoryMb>
-    <rat.skip>true</rat.skip>
-    <license.skip>true</license.skip>
-    <docker.repository>apache/drill</docker.repository>
-    <antlr.version>4.9.3</antlr.version>
-    <maven.version>3.8.4</maven.version>
-    <maven.min.version>3.6.3</maven.min.version>
-    <commons.net.version>3.9.0</commons.net.version>
-    <commons.validator.version>1.7</commons.validator.version>
-    <commons.text.version>1.10.0</commons.text.version>
-    <protobuf.version>3.16.3</protobuf.version>
-    <protostuff.version>1.8.0</protostuff.version>
-    <codemodel.version>2.6</codemodel.version>
-    <joda.version>2.12.5</joda.version>
-    <javax.el.version>3.0.0</javax.el.version>
-    <surefire.version>3.1.2</surefire.version>
-    <jna.version>5.13.0</jna.version>
-    <commons.compress.version>1.25.0</commons.compress.version>
-    <hikari.version>4.0.3</hikari.version>
-    <netty.version>4.1.101.Final</netty.version>
     <httpclient.version>4.5.14</httpclient.version>
+    <httpdlog-parser.version>5.10.0</httpdlog-parser.version>
+    <iceberg.version>0.12.1</iceberg.version>
+    <jackson.version>2.16.1</jackson.version>
+    <janino.version>3.1.11</janino.version>
+    <javassist.version>3.29.2-GA</javassist.version>
+    <javax.el.version>3.0.0</javax.el.version>
+    <javax.validation.api>2.0.1.Final</javax.validation.api>
+    <jersey.version>2.40</jersey.version>
+    <jetty.version>9.4.51.v20230217</jetty.version>
+    <jmockit.version>1.47</jmockit.version>
+    <jna.version>5.13.0</jna.version>
+    <joda.version>2.12.5</joda.version>
+    <junit4.version>4.13.2</junit4.version>
+    <junit.args />
+    <junit.platform.version>1.8.2</junit.platform.version>
+    <junit.version>5.7.2</junit.version>
+    <kerby.version>1.0.1</kerby.version>
     <libthrift.version>0.18.1</libthrift.version>
-    <derby.version>10.14.2.0</derby.version>
-    <commons.cli.version>1.4</commons.cli.version>
+    <license.skip>true</license.skip>
+    <log4j.version>2.22.0</log4j.version>
+    <!-- Upgrading logback further breaks JDK 8 build compatibility -->
+    <logback.version>1.3.14</logback.version>
+    <maven.compiler.source>1.8</maven.compiler.source>
+    <maven.compiler.target>1.8</maven.compiler.target>
+    <maven.min.version>3.6.3</maven.min.version>
+    <maven.version>3.8.4</maven.version>
+    <memoryMb>3072</memoryMb>
+    <metrics.version>4.2.19</metrics.version>
+    <mockito.version>3.11.2</mockito.version>
+    <mongo.version>4.11.1</mongo.version>
+    <msgpack.version>0.6.6</msgpack.version>
+    <netty.tcnative.classifier />
+    <netty.tcnative.version>2.0.62.Final</netty.tcnative.version>
+    <netty.version>4.1.101.Final</netty.version>
+    <parquet.format.version>2.9.0</parquet.format.version>
+    <parquet.version>1.12.3</parquet.version>
+    <project.build.outputTimestamp>1676438963</project.build.outputTimestamp>
+    <protobuf.version>3.16.3</protobuf.version>
+    <proto.cas.path>${project.basedir}/src/main/protobuf/</proto.cas.path>
+    <protostuff.version>1.8.0</protostuff.version>
+    <rat.skip>true</rat.skip>
+    <reflections.version>0.9.10</reflections.version>
+    <slf4j.version>2.0.6</slf4j.version>
     <snakeyaml.version>2.1</snakeyaml.version>
-    <commons.lang3.version>3.10</commons.lang3.version>
+    <sourceReleaseAssemblyDescriptor>source-release-zip-tar</sourceReleaseAssemblyDescriptor>
+    <sqlline.version>1.12.0</sqlline.version>
+    <surefire.version>3.1.2</surefire.version>
+    <swagger.version>2.1.12</swagger.version>
+    <target.gen.source.path>${project.basedir}/target/generated-sources</target.gen.source.path>
     <testcontainers.version>1.18.3</testcontainers.version>
     <typesafe.config.version>1.4.2</typesafe.config.version>
-    <commons.codec.version>1.16.0</commons.codec.version>
-    <xerces.version>2.12.2</xerces.version>
-    <commons.configuration.version>1.10</commons.configuration.version>
-    <commons.beanutils.version>1.9.4</commons.beanutils.version>
-    <httpdlog-parser.version>5.10.0</httpdlog-parser.version>
-    <yauaa.version>7.19.2</yauaa.version>
-    <log4j.version>2.22.0</log4j.version>
-    <aircompressor.version>0.25</aircompressor.version>
-    <iceberg.version>0.12.1</iceberg.version>
     <univocity-parsers.version>2.8.3</univocity-parsers.version>
-    <mongo.version>4.11.1</mongo.version>
-    <swagger.version>2.1.12</swagger.version>
-    <junit.args />
+    <wiremock.standalone.version>2.23.2</wiremock.standalone.version>
+    <xerces.version>2.12.2</xerces.version>
+    <yauaa.version>7.19.2</yauaa.version>
+    <zookeeper.version>3.5.10</zookeeper.version>
   </properties>
 
   <scm>
@@ -218,112 +231,11 @@
             <!-- Don't include target -->
             <exclude>**/target/**/*.java</exclude>
           </sourceFileExcludes>
-          <additionalDependencies>
-            <!-- These dependencies are required for javadoc in order to properly resolve class references in some javadocs. -->
-            <dependency>
-              <groupId>org.apache.hbase</groupId>
-              <artifactId>hbase-server</artifactId>
-              <version>${hbase.version}</version>
-              <classifier>tests</classifier>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.avro</groupId>
-              <artifactId>avro</artifactId>
-              <version>${avro.version}</version>
-              <classifier>tests</classifier>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.kerby</groupId>
-              <artifactId>kerb-core</artifactId>
-              <version>${kerby.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.kerby</groupId>
-              <artifactId>kerb-client</artifactId>
-              <version>${kerby.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.kerby</groupId>
-              <artifactId>kerb-simplekdc</artifactId>
-              <version>${kerby.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.maven</groupId>
-              <artifactId>maven-embedder</artifactId>
-              <version>${maven.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.curator</groupId>
-              <artifactId>curator-test</artifactId>
-              <version>${curator.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.hadoop</groupId>
-              <artifactId>hadoop-hdfs</artifactId>
-              <version>${hadoop.version}</version>
-              <classifier>tests</classifier>
-            </dependency>
-            <!--  Remove dependency on tests - see DRILL-6637
-                       <dependency>
-                         <groupId>org.apache.drill.exec</groupId>
-                         <artifactId>drill-java-exec</artifactId>
-                         <version>${project.version}</version>
-                         <classifier>tests</classifier>
-                       </dependency>
-                       <dependency>
-                         <groupId>org.apache.drill</groupId>
-                         <artifactId>drill-common</artifactId>
-                         <version>${project.version}</version>
-                         <classifier>tests</classifier>
-                       </dependency>
-            -->
-            <dependency>
-              <groupId>com.github.tomakehurst</groupId>
-              <artifactId>wiremock-standalone</artifactId>
-              <version>${wiremock.standalone.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.kerby</groupId>
-              <artifactId>kerb-client</artifactId>
-              <version>${kerby.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.apache.parquet</groupId>
-              <artifactId>parquet-hadoop</artifactId>
-              <version>${parquet.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>org.jmockit</groupId>
-              <artifactId>jmockit</artifactId>
-              <version>${jmockit.version}</version>
-            </dependency>
-            <additionalDependency>
-              <groupId>org.hamcrest</groupId>
-              <artifactId>hamcrest</artifactId>
-              <version>${hamcrest.version}</version>
-            </additionalDependency>
-            <dependency>
-              <groupId>org.mockito</groupId>
-              <artifactId>mockito-core</artifactId>
-              <version>${mockito.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>ch.qos.logback</groupId>
-              <artifactId>logback-classic</artifactId>
-              <version>${logback.version}</version>
-            </dependency>
-            <dependency>
-              <groupId>ch.qos.logback</groupId>
-              <artifactId>logback-core</artifactId>
-              <version>${logback.version}</version>
-            </dependency>
-          </additionalDependencies>
         </configuration>
       </plugin>
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
-        <version>0.15</version>
         <executions>
           <execution>
             <id>rat-checks</id>
@@ -334,113 +246,99 @@
         </executions>
         <configuration>
           <excludes>
-            <!-- Types log1, log2, sqllog and sqllog2, ssdlog are used to test he logRegex format plugin. -->
-            <!-- Type sas7bdat files are SAS file and are used to test the SAS format plugin -->
-            <exclude>**/clientlib/y2038/*.c</exclude> <!-- All the files here should have MIT License -->
-            <exclude>**/clientlib/y2038/*.h</exclude> <!-- All the files here should have MIT License -->
-            <exclude>**/resources/parquet/**/*</exclude>
-            <exclude>**/.asf.yaml</exclude>
-            <exclude>**/*.woff2</exclude>
-            <exclude>**/*.ks</exclude>
-            <exclude>**/*.pcap</exclude>
-            <exclude>**/*.mdb</exclude>
+            <!-- Please keep this list sorted. -->
             <exclude>**/*.accdb</exclude>
-            <exclude>**/*.sas7bdat</exclude>
-            <exclude>**/*.log1</exclude>
-            <exclude>**/*.log2</exclude>
-            <exclude>**/*.sav</exclude>
-            <exclude>**/*.h5</exclude>
-            <exclude>**/*.sqllog</exclude>
-            <exclude>**/*.sqllog2</exclude>
-            <exclude>**/*.syslog</exclude>
-            <exclude>**/*.xsd</exclude>
-            <exclude>**/*.xls</exclude>
-            <exclude>**/*.xlsx</exclude>
-            <exclude>**/*.syslog1</exclude>
-            <exclude>**/*.ssdlog</exclude>
-            <exclude>**/*.ltsv</exclude>
-            <exclude>**/*.log</exclude>
-            <exclude>**/*.css</exclude>
-            <exclude>**/*.js</exclude>
-            <exclude>**/*.map</exclude>
-            <exclude>**/*.md</exclude>
-            <exclude>**/*.eps</exclude>
-            <exclude>**/*.json</exclude>
-            <exclude>**/*.seq</exclude>
-            <exclude>**/*.parquet</exclude>
+            <exclude>**/*.access_log</exclude>
+            <exclude>**/*.access_log</exclude>
+            <exclude>**/.asf.yaml</exclude>
+            <exclude>**/*.autotools</exclude>
+            <exclude>**/*.avi</exclude>
             <exclude>**/*.avro</exclude>
-            <exclude>**/*.sql</exclude>
-            <exclude>**/git.properties</exclude>
-            <exclude>**/*.csv</exclude>
-            <exclude>**/*.csvh</exclude>
-            <exclude>**/*.pdf</exclude>
-            <exclude>**/*.csvh-test</exclude>
-            <exclude>**/*.tsv</exclude>
-            <exclude>**/*.txt</exclude>
-            <exclude>**/*.ssv</exclude>
             <exclude>**/.buildpath</exclude>
-            <exclude>**/target/**</exclude>
-            <exclude>**/*.iml</exclude>
-            <exclude>**/.idea/**</exclude>
-            <exclude>**/*.project</exclude>
-            <exclude>**/TAGS</exclude>
             <exclude>**/*.checkstyle</exclude>
             <exclude>**/.classpath</exclude>
-            <exclude>**/.settings/**</exclude>
+            <exclude>**/client/*build*/**</exclude>
+            <exclude>**/clientlib/y2038/*.c</exclude> <!-- All the files here should have MIT License -->
+            <exclude>**/clientlib/y2038/*.h</exclude> <!-- All the files here should have MIT License -->
+            <exclude>**/client/tags</exclude>
+            <exclude>**/cmake_install.cmake</exclude>
+            <exclude>**/*.cnf</exclude>
+            <exclude>**/control</exclude>
+            <exclude>**/*.cproject</exclude>
+            <exclude>**/*.css</exclude>
+            <exclude>**/*.csv</exclude>
+            <exclude>**/*.csvh</exclude>
+            <exclude>**/*.csvh-test</exclude>
+            <exclude>**/*.dbf</exclude>
+            <!-- TODO DRILL-4336: try to avoid the need to add this -->
+            <exclude>dependency-reduced-pom.xml</exclude>
+            <exclude>**/*.drill</exclude>
+            <exclude>**/.drill.parquet_metadata</exclude>
+            <exclude>**/*.eps</exclude>
+            <exclude>**/git.properties</exclude>
+            <exclude>**/*.h5</exclude>
+            <exclude>header</exclude>
+            <exclude>**/*.httpd</exclude>
+            <exclude>**/.idea/**</exclude>
+            <exclude>**/*.iml</exclude>
+            <exclude>**/*.js</exclude>
+            <exclude>**/*.json</exclude>
+            <exclude>KEYS</exclude>
+            <exclude>**/*.ks</exclude>
+            <exclude>**/LICENSE</exclude>
+            <exclude>**/*.log1</exclude> <!-- logRefex format plugin -->
+            <exclude>**/*.log2</exclude> <!-- logRefex format plugin -->
+            <exclude>**/*.log</exclude>
+            <exclude>**/*.ltsv</exclude>
+            <exclude>**/*.ltsv</exclude>
+            <exclude>**/*.map</exclude>
+            <exclude>**/*.mdb</exclude>
+            <exclude>**/*.md</exclude>
+            <exclude>**/*.mov</exclude>
+            <exclude>**/*.mp4</exclude>
+            <exclude>**/NOTICE</exclude>
+            <exclude>**/*.parquet</exclude>
             <exclude>**/*.patch</exclude>
             <exclude>**/*.pb.cc</exclude>
             <exclude>**/*.pb.h</exclude>
-            <exclude>**/client/*build*/**</exclude>
-            <exclude>**/client/tags</exclude>
-            <exclude>**/cmake_install.cmake</exclude>
-            <exclude>**/ssl/*.csr</exclude>
-            <exclude>**/ssl/*.pem</exclude>
-            <exclude>**/ssl/*.p12</exclude>
-            <exclude>**/*.tbl</exclude>
-            <exclude>**/*.httpd</exclude>
-            <exclude>**/*.access_log</exclude>
-            <exclude>**/*.autotools</exclude>
-            <exclude>**/*.cproject</exclude>
-            <exclude>**/*.drill</exclude>
-            <exclude>**/LICENSE</exclude>
-            <exclude>**/NOTICE</exclude>
-            <exclude>KEYS</exclude>
-            <exclude>header</exclude>
-            <exclude>**/.drill.parquet_metadata</exclude>
-            <exclude>**/*.mov</exclude>
-            <exclude>**/*.mp4</exclude>
-            <exclude>**/*.avi</exclude>
-            <exclude>**/*.pcx</exclude>
-            <exclude>**/*.webp</exclude>
+            <exclude>**/*.pcap</exclude>
             <exclude>**/*.pcapng</exclude>
-            <exclude>**/*.psd</exclude>
             <exclude>**/*.pcx</exclude>
-            <exclude>**/*.log1</exclude>
-            <exclude>**/*.log2</exclude>
-            <exclude>**/*.sqllog</exclude>
-            <exclude>**/*.sqllog2</exclude>
-            <exclude>**/*.ltsv</exclude>
-            <exclude>**/*.wav</exclude>
-            <exclude>**/control</exclude>
-            <!-- TODO DRILL-4336: try to avoid the need to add this -->
-            <exclude>dependency-reduced-pom.xml</exclude>
+            <exclude>**/*.pcx</exclude>
+            <exclude>**/*.pdf</exclude>
             <exclude>**/*.prj</exclude>
+            <exclude>**/*.project</exclude>
+            <exclude>**/*.psd</exclude>
+            <exclude>**/resources/parquet/**/*</exclude>
+            <exclude>**/*.sas7bdat</exclude> <!-- SAS format plugin -->
+            <exclude>**/*.sav</exclude>
+            <exclude>**/*.seq</exclude>
+            <exclude>**/.settings/**</exclude>
             <exclude>**/*.shp</exclude>
-            <exclude>**/*.dbf</exclude>
-            <exclude>**/*.cnf</exclude>
-            <exclude>**/*.access_log</exclude>
+            <exclude>**/*.sql</exclude>
+            <exclude>**/*.sqllog2</exclude> <!-- logRefex format plugin -->
+            <exclude>**/*.sqllog</exclude> <!-- logRefex format plugin -->
+            <exclude>**/*.ssdlog</exclude> <!-- logRefex format plugin -->
+            <exclude>**/ssl/*.csr</exclude>
+            <exclude>**/ssl/*.p12</exclude>
+            <exclude>**/ssl/*.pem</exclude>
+            <exclude>**/*.ssv</exclude>
+            <exclude>**/*.syslog1</exclude> <!-- logRefex format plugin -->
+            <exclude>**/*.syslog</exclude> <!-- logRefex format plugin -->
+            <exclude>**/TAGS</exclude>
+            <exclude>**/target/**</exclude>
+            <exclude>**/*.tbl</exclude>
+            <exclude>**/*.tsv</exclude>
+            <exclude>**/*.txt</exclude>
+            <exclude>**/*.wav</exclude>
+            <exclude>**/*.webp</exclude>
+            <exclude>**/*.woff2</exclude>
+            <exclude>**/*.xls</exclude>
+            <exclude>**/*.xlsx</exclude>
+            <exclude>**/*.xsd</exclude>
           </excludes>
         </configuration>
       </plugin>
-      <!--
-        DRILL-6320: The license-maven-plugin does a better job of checking headers than
-        the apache-rat-plugin. However, it is standard to include the apache-rat-plugin
-        in apache projects so both are used.
-      -->
-      <plugin>
-        <groupId>com.mycila</groupId>
-        <artifactId>license-maven-plugin</artifactId>
-      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
@@ -666,158 +564,6 @@
           <version>4.0.5</version>
         </plugin>
         <plugin>
-          <groupId>com.mycila</groupId>
-          <artifactId>license-maven-plugin</artifactId>
-          <version>4.2</version>
-          <configuration>
-            <aggregate>true</aggregate>
-            <!--suppress UnresolvedMavenProperty -->
-            <header>${maven.multiModuleProjectDirectory}/header</header>
-            <excludes>
-<exclude>**/*.accdb</exclude>
-              <exclude>**/*.access_log</exclude>
-              <exclude>**/.asf.yaml</exclude>
-              <exclude>**/*.autotools</exclude>
-              <exclude>**/*.avi</exclude>
-              <exclude>**/*.avro</exclude>
-              <exclude>**/.buildpath</exclude>
-              <exclude>**/*.checkstyle</exclude>
-              <exclude>**/.classpath</exclude>
-              <exclude>**/client/*build*/**</exclude>
-              <exclude>**/clientlib/y2038/*.c</exclude> <!-- All the files here should have MIT License -->
-              <exclude>**/clientlib/y2038/*.h</exclude> <!-- All the files here should have MIT License -->
-              <exclude>**/client/tags</exclude>
-              <exclude>**/cmake_install.cmake</exclude>
-              <exclude>**/control</exclude>
-              <exclude>**/*.cproject</exclude>
-              <exclude>**/.*.crc</exclude>
-              <exclude>**/*.css</exclude>
-              <exclude>**/*.csv</exclude>
-              <exclude>**/*.csvh</exclude>
-              <exclude>**/*.csvh-test</exclude>
-              <exclude>**/*.dbf</exclude>
-              <!-- TODO DRILL-4336: try to avoid the need to add this -->
-              <exclude>dependency-reduced-pom.xml</exclude>
-              <exclude>**/*.drill</exclude>
-              <exclude>**/.drill.parquet_metadata</exclude>
-              <exclude>**/*.eps</exclude>
-              <exclude>**/git.properties</exclude>
-              <exclude>**/*.h5</exclude>
-              <exclude>header</exclude>
-              <exclude>**/*.httpd</exclude>
-              <exclude>**/.idea/**</exclude>
-              <exclude>**/*.iml</exclude>
-              <exclude>**/*.js</exclude>
-              <exclude>**/*.json</exclude>
-              <exclude>KEYS</exclude>
-              <exclude>**/*.ks</exclude>
-              <exclude>**/LICENSE</exclude>
-              <exclude>**/*.log1</exclude>
-              <exclude>**/*.log1</exclude>
-              <exclude>**/*.log2</exclude>
-              <exclude>**/*.log2</exclude>
-              <exclude>**/*.log</exclude>
-              <exclude>**/*.ltsv</exclude>
-              <exclude>**/*.ltsv</exclude>
-              <exclude>**/*.map</exclude>
-              <exclude>**/*.mdb</exclude>
-              <exclude>**/*.md</exclude>
-              <exclude>**/*.mov</exclude>
-              <exclude>**/*.mp4</exclude>
-              <exclude>**/NOTICE</exclude>
-              <exclude>**/*.parquet</exclude>
-              <exclude>**/*.patch</exclude>
-              <exclude>**/*.pb.cc</exclude>
-              <exclude>**/*.pb.h</exclude>
-              <exclude>**/*.pcap</exclude>
-              <exclude>**/*.pcapng</exclude>
-              <exclude>**/*.pcx</exclude>
-              <exclude>**/*.pcx</exclude>
-              <exclude>**/*.pdf</exclude>
-              <exclude>**/*.prj</exclude>
-              <exclude>**/*.project</exclude>
-              <exclude>**/*.psd</exclude>
-              <exclude>**/resources/parquet/**/*</exclude>
-              <exclude>**/*.sas7bdat</exclude>
-              <exclude>**/*.sav</exclude>
-              <exclude>**/*.seq</exclude>
-              <exclude>**/.settings/**</exclude>
-              <exclude>**/*.shp</exclude>
-              <exclude>**/*.sql</exclude>
-              <exclude>**/*.sqllog2</exclude>
-              <exclude>**/*.sqllog2</exclude>
-              <exclude>**/*.sqllog</exclude>
-              <exclude>**/*.sqllog</exclude>
-              <exclude>**/*.ssdlog</exclude>
-              <exclude>**/ssl/*.csr</exclude>
-              <exclude>**/ssl/*.p12</exclude>
-              <exclude>**/ssl/*.pem</exclude>
-              <exclude>**/*.ssv</exclude>
-              <exclude>**/*.syslog1</exclude>
-              <exclude>**/*.syslog</exclude>
-              <exclude>**/TAGS</exclude>
-              <exclude>**/target/**</exclude>
-              <exclude>**/*.tbl</exclude>
-              <exclude>**/*.tsv</exclude>
-              <exclude>**/*.txt</exclude>
-              <exclude>**/*.wav</exclude>
-              <exclude>**/*.webp</exclude>
-              <exclude>**/*.woff2</exclude>
-              <exclude>**/*.xls</exclude>
-              <exclude>**/*.xlsx</exclude>
-              <exclude>**/*.xsd</exclude>
-            </excludes>
-            <mapping>
-              <boost>SLASHSTAR_STYLE</boost>
-              <build>SCRIPT_STYLE</build>
-              <cmake>SCRIPT_STYLE</cmake>
-              <cnf>SCRIPT_STYLE</cnf>
-              <conf>SCRIPT_STYLE</conf>
-              <conffiles>SCRIPT_STYLE</conffiles>
-              <config>SCRIPT_STYLE</config>
-              <cpp>SLASHSTAR_STYLE</cpp>
-              <cql>SLASHSTAR_STYLE</cql>
-              <dockerignore>SCRIPT_STYLE</dockerignore>
-              <drillbit>SCRIPT_STYLE</drillbit>
-              <drill-conf>SCRIPT_STYLE</drill-conf>
-              <drill-embedded>SCRIPT_STYLE</drill-embedded>
-              <drill-localhost>SCRIPT_STYLE</drill-localhost>
-              <dumpcat>SCRIPT_STYLE</dumpcat>
-              <env>SCRIPT_STYLE</env>
-              <fmpp>SCRIPT_STYLE</fmpp>
-              <g4>SLASHSTAR_STYLE</g4>
-              <hcl>DOUBLESLASH_STYLE</hcl>
-              <hpp>SLASHSTAR_STYLE</hpp>
-              <in>SLASHSTAR_STYLE</in>
-              <ipp>SLASHSTAR_STYLE</ipp>
-              <jaasconf>SLASHSTAR_STYLE</jaasconf>
-              <java>SLASHSTAR_STYLE</java>
-              <jj>SLASHSTAR_STYLE</jj>
-              <linux>SLASHSTAR_STYLE</linux>
-              <macos>SLASHSTAR_STYLE</macos>
-              <plist>XML_STYLE</plist>
-              <props>SCRIPT_STYLE</props>
-              <proto>DOUBLESLASH_STYLE</proto>
-              <push>SCRIPT_STYLE</push>
-              <runbit>SCRIPT_STYLE</runbit>
-              <runexec>SCRIPT_STYLE</runexec>
-              <sasl>SLASHSTAR_STYLE</sasl>
-              <sqlline>SCRIPT_STYLE</sqlline>
-              <ssl>SLASHSTAR_STYLE</ssl>
-              <submit_plan>SCRIPT_STYLE</submit_plan>
-              <tdd>SCRIPT_STYLE</tdd>
-              <txt>SLASHSTAR_STYLE</txt>
-            </mapping>
-          </configuration>
-          <executions>
-            <execution>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.11.0</version>
@@ -1037,7 +783,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
-          <version>3.5.0</version>
+          <version>3.6.3</version>
           <configuration>
             <doclint>none</doclint>
           </configuration>
@@ -1094,6 +840,19 @@
     </dependency>
 
     <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-classic</artifactId>
+      <version>${logback.version}</version>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>ch.qos.logback</groupId>
+      <artifactId>logback-core</artifactId>
+      <version>${logback.version}</version>
+      <scope>runtime</scope>
+    </dependency>
+
+    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>${commons.io.version}</version>
@@ -1162,52 +921,11 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <version>${logback.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-core</artifactId>
-      <version>${logback.version}</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
       <groupId>de.huxhorn.lilith</groupId>
       <artifactId>de.huxhorn.lilith.logback.appender.multiplex-classic</artifactId>
       <version>8.3.0</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.apache.kerby</groupId>
-      <artifactId>kerb-client</artifactId>
-      <scope>test</scope>
-      <version>${kerby.version}</version>
-      <exclusions>
-        <exclusion>
-          <artifactId>log4j</artifactId>
-          <groupId>log4j</groupId>
-        </exclusion>
-        <exclusion>
-          <artifactId>slf4j-log4j12</artifactId>
-          <groupId>org.slf4j</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kerby</groupId>
-      <artifactId>kerb-core</artifactId>
-      <scope>test</scope>
-      <version>${kerby.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.kerby</groupId>
-      <artifactId>kerb-simplekdc</artifactId>
-      <scope>test</scope>
-      <version>${kerby.version}</version>
-    </dependency>
 
   </dependencies>
 
@@ -1268,6 +986,10 @@
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.apiguardian</groupId>
+            <artifactId>apiguardian-api</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
       <dependency>
@@ -1635,7 +1357,7 @@
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-tcnative</artifactId>
-        <version>2.0.48.Final</version>
+        <version>${netty.tcnative.version}</version>
         <classifier>${netty.tcnative.classifier}</classifier>
         <scope>runtime</scope>
         <optional>true</optional>
@@ -3123,7 +2845,7 @@
           <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>findbugs-maven-plugin</artifactId>
-            <version>3.0.0</version>
+            <version>3.0.1</version>
             <configuration>
               <!--
                Enables analysis which takes more memory but finds more bugs.
diff --git a/protocol/pom.xml b/protocol/pom.xml
index 1a21f30..6615bb9 100644
--- a/protocol/pom.xml
+++ b/protocol/pom.xml
@@ -125,8 +125,23 @@
             </executions>
           </plugin>
           <plugin>
+            <!-- The org.codehaus.mojo.license-maven-plugin already present in the parent POM
+            can also add license headers but not without contaminating them with tags that it uses
+            to orient itself. So we are forced to use a different license-maven-plugin here. -->
             <groupId>com.mycila</groupId>
             <artifactId>license-maven-plugin</artifactId>
+            <version>4.3</version>
+            <configuration>
+              <skip>false</skip>
+              <licenseSets>
+                <licenseSet>
+                  <header>${maven.multiModuleProjectDirectory}/HEADER-2.0.txt</header>
+                  <includes>
+                    <include>src/main/java/**/*.java</include>
+                  </includes>
+                </licenseSet>
+              </licenseSets>
+            </configuration>
             <executions>
               <execution>
                 <id>proto-format</id>
@@ -144,7 +159,7 @@
 
   <build>
     <plugins>
-    <plugin>
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-checkstyle-plugin</artifactId>
         <configuration>
