
List of third-party dependencies grouped by their license type.


    Apache License

        * HttpClient (commons-httpclient:commons-httpclient:3.0.1 - http://jakarta.apache.org/commons/httpclient/)
        * HttpClient (commons-httpclient:commons-httpclient:3.1 - http://jakarta.apache.org/httpcomponents/httpclient-3.x/)
        * HttpClient (org.apache.httpcomponents:httpclient:4.2.5 - http://hc.apache.org/httpcomponents-client)
        * HttpCore (org.apache.httpcomponents:httpcore:4.2.4 - http://hc.apache.org/httpcomponents-core-ga)
        * Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.6.6 - http://www.slf4j.org)
        * Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.7.25 - http://www.slf4j.org)

    Apache License, Version 2.0

        * ActiveMQ :: Broker (org.apache.activemq:activemq-broker:5.15.8 - http://activemq.apache.org/activemq-broker)
        * ActiveMQ :: Client (org.apache.activemq:activemq-client:5.15.8 - http://activemq.apache.org/activemq-client)
        * ActiveMQ :: KahaDB Store (org.apache.activemq:activemq-kahadb-store:5.15.8 - http://activemq.apache.org/activemq-kahadb-store)
        * ActiveMQ :: MQTT Protocol (org.apache.activemq:activemq-mqtt:5.15.8 - http://activemq.apache.org/activemq-mqtt)
        * ActiveMQ :: Openwire Legacy Support (org.apache.activemq:activemq-openwire-legacy:5.15.8 - http://activemq.apache.org/activemq-openwire-legacy)
        * ActiveMQ Protocol Buffers Implementation and Compiler (org.apache.activemq.protobuf:activemq-protobuf:1.1 - http://activemq.apache.org/activemq-protobuf)
        * Aether :: API (org.sonatype.aether:aether-api:1.7 - http://aether.sonatype.org/aether-api/)
        * Aether :: Implementation (org.sonatype.aether:aether-impl:1.7 - http://aether.sonatype.org/aether-impl/)
        * Aether :: SPI (org.sonatype.aether:aether-spi:1.7 - http://aether.sonatype.org/aether-spi/)
        * Aether :: Utilities (org.sonatype.aether:aether-util:1.7 - http://aether.sonatype.org/aether-util/)
        * Aggregate Designer Algorithm (net.hydromatic:aggdesigner-algorithm:6.0 - http://github.com/julianhyde/aggdesigner/aggdesigner-algorithm)
        * aircompressor (io.airlift:aircompressor:0.3 - http://github.com/airlift/aircompressor)
        * Annotation 1.0 (org.apache.geronimo.specs:geronimo-annotation_1.0_spec:1.1.1 - http://geronimo.apache.org/specs/geronimo-annotation_1.0_spec)
        * Annotations for Metrics (io.dropwizard.metrics:metrics-annotation:4.0.2 - http://metrics.dropwizard.io/metrics-annotation)
        * An open source Java toolkit for Amazon S3 (net.java.dev.jets3t:jets3t:0.9.0 - http://www.jets3t.org)
        * ant (ant:ant:1.6.5 - http://www.apache.org/ant/)
        * Apache Ant Core (org.apache.ant:ant:1.9.1 - http://ant.apache.org/)
        * Apache Ant Launcher (org.apache.ant:ant-launcher:1.9.1 - http://ant.apache.org/)
        * Apache Avro (org.apache.avro:avro:1.7.4 - http://avro.apache.org)
        * Apache Avro (org.apache.avro:avro:1.7.7 - http://avro.apache.org)
        * Apache Calcite Avatica (org.apache.calcite.avatica:avatica:1.8.0 - http://calcite.apache.org/avatica/avatica)
        * Apache Calcite Avatica (org.apache.calcite.avatica:avatica-core:1.10.0 - https://calcite.apache.org/avatica/avatica-core)
        * Apache Calcite Avatica Metrics (org.apache.calcite.avatica:avatica-metrics:1.10.0 - https://calcite.apache.org/avatica/avatica-metrics)
        * Apache Calcite Avatica Metrics (org.apache.calcite.avatica:avatica-metrics:1.8.0 - http://calcite.apache.org/avatica/avatica-metrics)
        * Apache Commons CLI (commons-cli:commons-cli:1.3.1 - http://commons.apache.org/proper/commons-cli/)
        * Apache Commons CLI (commons-cli:commons-cli:1.4 - http://commons.apache.org/proper/commons-cli/)
        * Apache Commons Codec (commons-codec:commons-codec:1.10 - http://commons.apache.org/proper/commons-codec/)
        * Apache Commons Codec (commons-codec:commons-codec:1.11 - http://commons.apache.org/proper/commons-codec/)
        * Apache Commons Codec (commons-codec:commons-codec:1.9 - http://commons.apache.org/proper/commons-codec/)
        * Apache Commons Collections (commons-collections:commons-collections:3.2.2 - http://commons.apache.org/collections/)
        * Apache Commons Compress (org.apache.commons:commons-compress:1.18 - https://commons.apache.org/proper/commons-compress/)
        * Apache Commons Compress (org.apache.commons:commons-compress:1.9 - http://commons.apache.org/proper/commons-compress/)
        * Apache Commons Crypto (org.apache.commons:commons-crypto:1.0.0 - http://commons.apache.org/proper/commons-crypto/)
        * Apache Commons CSV (org.apache.commons:commons-csv:1.4 - http://commons.apache.org/proper/commons-csv/)
        * Apache Commons Exec (org.apache.commons:commons-exec:1.3 - http://commons.apache.org/proper/commons-exec/)
        * Apache Commons FileUpload (commons-fileupload:commons-fileupload:1.3.3 - http://commons.apache.org/proper/commons-fileupload/)
        * Apache Commons IO (commons-io:commons-io:2.5 - http://commons.apache.org/proper/commons-io/)
        * Apache Commons IO (commons-io:commons-io:2.6 - http://commons.apache.org/proper/commons-io/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.2 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.3 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.4 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.6 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.7 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Lang (org.apache.commons:commons-lang3:3.8.1 - http://commons.apache.org/proper/commons-lang/)
        * Apache Commons Logging (commons-logging:commons-logging:1.2 - http://commons.apache.org/proper/commons-logging/)
        * Apache Commons Math (org.apache.commons:commons-math3:3.6.1 - http://commons.apache.org/proper/commons-math/)
        * Apache Commons Net (commons-net:commons-net:3.6 - http://commons.apache.org/proper/commons-net/)
        * Apache Commons Pool (org.apache.commons:commons-pool2:2.4.2 - http://commons.apache.org/proper/commons-pool/)
        * Apache Commons Text (org.apache.commons:commons-text:1.2 - http://commons.apache.org/proper/commons-text/)
        * Apache Curator (org.apache.curator:apache-curator:2.7.1 - http://curator.apache.org)
        * Apache Derby Database Engine and Embedded JDBC Driver (org.apache.derby:derby:10.10.2.0 - http://db.apache.org/derby/derby/)
        * Apache Directory API ASN.1 API (org.apache.directory.api:api-asn1-api:1.0.0-M20 - http://directory.apache.org/api-parent/api-asn1-parent/api-asn1-api/)
        * Apache Directory LDAP API Utilities (org.apache.directory.api:api-util:1.0.0-M20 - http://directory.apache.org/api-parent/api-util/)
        * ApacheDS I18n (org.apache.directory.server:apacheds-i18n:2.0.0-M15 - http://directory.apache.org/apacheds/1.5/apacheds-i18n)
        * ApacheDS Protocol Kerberos Codec (org.apache.directory.server:apacheds-kerberos-codec:2.0.0-M15 - http://directory.apache.org/apacheds/1.5/apacheds-kerberos-codec)
        * Apache Groovy (org.codehaus.groovy:groovy-all:2.4.4 - http://groovy-lang.org)
        * Apache Hadoop Annotations (org.apache.hadoop:hadoop-annotations:2.7.7 - no url defined)
        * Apache Hadoop Annotations (org.apache.hadoop:hadoop-annotations:2.8.5 - no url defined)
        * Apache Hadoop Archives (org.apache.hadoop:hadoop-archives:2.7.2 - no url defined)
        * Apache Hadoop Auth (org.apache.hadoop:hadoop-auth:2.7.7 - no url defined)
        * Apache Hadoop Auth (org.apache.hadoop:hadoop-auth:2.8.5 - no url defined)
        * Apache Hadoop Client (org.apache.hadoop:hadoop-client:2.8.5 - no url defined)
        * Apache Hadoop Common (org.apache.hadoop:hadoop-common:2.7.7 - no url defined)
        * Apache Hadoop Common (org.apache.hadoop:hadoop-common:2.8.5 - no url defined)
        * Apache Hadoop HDFS (org.apache.hadoop:hadoop-hdfs:2.7.2 - no url defined)
        * Apache Hadoop HDFS (org.apache.hadoop:hadoop-hdfs:2.7.7 - no url defined)
        * Apache Hadoop HDFS (org.apache.hadoop:hadoop-hdfs:2.8.5 - no url defined)
        * Apache Hadoop HDFS Client (org.apache.hadoop:hadoop-hdfs-client:2.8.5 - no url defined)
        * Apache Hadoop MapReduce App (org.apache.hadoop:hadoop-mapreduce-client-app:2.8.5 - no url defined)
        * Apache Hadoop MapReduce Common (org.apache.hadoop:hadoop-mapreduce-client-common:2.8.5 - no url defined)
        * Apache Hadoop MapReduce Core (org.apache.hadoop:hadoop-mapreduce-client-core:2.8.5 - no url defined)
        * Apache Hadoop MapReduce JobClient (org.apache.hadoop:hadoop-mapreduce-client-jobclient:2.8.5 - no url defined)
        * Apache Hadoop MapReduce Shuffle (org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.8.5 - no url defined)
        * Apache Hadoop YARN API (org.apache.hadoop:hadoop-yarn-api:2.8.5 - no url defined)
        * Apache Hadoop YARN Client (org.apache.hadoop:hadoop-yarn-client:2.8.5 - no url defined)
        * Apache Hadoop YARN Common (org.apache.hadoop:hadoop-yarn-common:2.8.5 - no url defined)
        * Apache Hadoop YARN Server Common (org.apache.hadoop:hadoop-yarn-server-common:2.8.5 - no url defined)
        * Apache HBase - Annotations (org.apache.hbase:hbase-annotations:2.1.3 - http://hbase.apache.org/hbase-annotations)
        * Apache HBase - Client (org.apache.hbase:hbase-client:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-client)
        * Apache HBase - Common (org.apache.hbase:hbase-common:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-common)
        * Apache HBase - Hadoop Compatibility (org.apache.hbase:hbase-hadoop-compat:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-hadoop-compat)
        * Apache HBase - Hadoop Two Compatibility (org.apache.hbase:hbase-hadoop2-compat:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-hadoop2-compat)
        * Apache HBase - HTTP (org.apache.hbase:hbase-http:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-http)
        * Apache HBase - Metrics API (org.apache.hbase:hbase-metrics-api:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-metrics-api)
        * Apache HBase - Metrics Implementation (org.apache.hbase:hbase-metrics:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-metrics)
        * Apache HBase Patched & Relocated (Shaded) Protobuf (org.apache.hbase.thirdparty:hbase-shaded-protobuf:2.1.0 - http://hbase.apache.org/hbase-shaded-protobuf)
        * Apache HBase - Procedure (org.apache.hbase:hbase-procedure:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-procedure)
        * Apache HBase - Protocol (org.apache.hbase:hbase-protocol:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-protocol)
        * Apache HBase Relocated (Shaded) Netty Libs (org.apache.hbase.thirdparty:hbase-shaded-netty:2.1.0 - http://hbase.apache.org/hbase-shaded-netty)
        * Apache HBase Relocated (Shaded) Third-party Miscellaneous Libs (org.apache.hbase.thirdparty:hbase-shaded-miscellaneous:2.1.0 - http://hbase.apache.org/hbase-shaded-miscellaneous)
        * Apache HBase - Replication (org.apache.hbase:hbase-replication:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-replication)
        * Apache HBase - Server (org.apache.hbase:hbase-server:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-server)
        * Apache HBase - Shaded Protocol (org.apache.hbase:hbase-protocol-shaded:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-protocol-shaded)
        * Apache HBase - Zookeeper (org.apache.hbase:hbase-zookeeper:2.1.3 - http://hbase.apache.org/hbase-build-configuration/hbase-zookeeper)
        * Apache HttpAsyncClient (org.apache.httpcomponents:httpasyncclient:4.1.2 - http://hc.apache.org/httpcomponents-asyncclient)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.3.6 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.4.1 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.2 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.6 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.5 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpClient Mime (org.apache.httpcomponents:httpmime:4.4.1 - http://hc.apache.org/httpcomponents-client)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.3.3 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.10 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.1 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.4 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache HttpCore (org.apache.httpcomponents:httpcore:4.4.5 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache HttpCore NIO (org.apache.httpcomponents:httpcore-nio:4.4.5 - http://hc.apache.org/httpcomponents-core-ga)
        * Apache Ivy (org.apache.ivy:ivy:2.4.0 - http://ant.apache.org/ivy/)
        * Apache Kafka (org.apache.kafka:kafka-clients:0.11.0.3 - http://kafka.apache.org)
        * Apache Log4j (log4j:log4j:1.2.17 - http://logging.apache.org/log4j/1.2/)
        * Apache Log4j 1.x Compatibility API (org.apache.logging.log4j:log4j-1.2-api:2.6.2 - http://logging.apache.org/log4j/2.x/log4j-1.2-api/)
        * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.11.1 - https://logging.apache.org/log4j/2.x/log4j-api/)
        * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.6.2 - http://logging.apache.org/log4j/2.x/log4j-api/)
        * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.11.1 - https://logging.apache.org/log4j/2.x/log4j-core/)
        * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.6.2 - http://logging.apache.org/log4j/2.x/log4j-core/)
        * Apache Log4j SLF4J Binding (org.apache.logging.log4j:log4j-slf4j-impl:2.11.1 - https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
        * Apache Log4j Web (org.apache.logging.log4j:log4j-web:2.6.2 - http://logging.apache.org/log4j/2.x/log4j-web/)
        * Apache Maven Artifact Transfer (org.apache.maven.shared:maven-artifact-transfer:0.9.1 - https://maven.apache.org/shared/maven-artifact-transfer/)
        * Apache Maven Common Artifact Filters (org.apache.maven.shared:maven-common-artifact-filters:3.0.1 - https://maven.apache.org/shared/maven-common-artifact-filters/)
        * Apache Maven Dependency Tree (org.apache.maven.shared:maven-dependency-tree:2.2 - http://maven.apache.org/shared/maven-dependency-tree/)
        * Apache Maven Shade Plugin (org.apache.maven.plugins:maven-shade-plugin:3.1.1 - https://maven.apache.org/plugins/maven-shade-plugin/)
        * Apache Maven Shared Utils (org.apache.maven.shared:maven-shared-utils:3.1.0 - https://maven.apache.org/shared/maven-shared-utils/)
        * Apache Maven Shared Utils (org.apache.maven.shared:maven-shared-utils:3.2.1 - https://maven.apache.org/shared/maven-shared-utils/)
        * Apache Parquet Hadoop Bundle (org.apache.parquet:parquet-hadoop-bundle:1.8.1 - https://parquet.apache.org)
        * Apache Solr Solrj (org.apache.solr:solr-solrj:5.5.5 - http://lucene.apache.org/solr-parent/solr-solrj)
        * Apache Thrift (org.apache.thrift:libfb303:0.9.3 - http://thrift.apache.org)
        * Apache Thrift (org.apache.thrift:libthrift:0.9.3 - http://thrift.apache.org)
        * Apache Twill API (org.apache.twill:twill-api:0.6.0-incubating - http://twill.incubator.apache.org/twill-api)
        * Apache Twill common library (org.apache.twill:twill-common:0.6.0-incubating - http://twill.incubator.apache.org/twill-common)
        * Apache Twill core library (org.apache.twill:twill-core:0.6.0-incubating - http://twill.incubator.apache.org/twill-core)
        * Apache Twill discovery service API (org.apache.twill:twill-discovery-api:0.6.0-incubating - http://twill.incubator.apache.org/twill-discovery-api)
        * Apache Twill discovery service implementations (org.apache.twill:twill-discovery-core:0.6.0-incubating - http://twill.incubator.apache.org/twill-discovery-core)
        * Apache Twill ZooKeeper client library (org.apache.twill:twill-zookeeper:0.6.0-incubating - http://twill.incubator.apache.org/twill-zookeeper)
        * Apache Velocity (org.apache.velocity:velocity:1.5 - http://velocity.apache.org/engine/releases/velocity-1.5/)
        * Apache XBean :: Spring (org.apache.xbean:xbean-spring:4.8 - http://geronimo.apache.org/maven/xbean/4.8/xbean-spring)
        * Apache Yetus - Audience Annotations (org.apache.yetus:audience-annotations:0.5.0 - https://yetus.apache.org/audience-annotations)
        * ASM based accessors helper used by json-smart (net.minidev:accessors-smart:1.2 - http://www.minidev.net/)
        * Auto Common Libraries (com.google.auto:auto-common:0.8 - https://github.com/google/auto/auto-common)
        * AWS Java SDK for Amazon API Gateway (com.amazonaws:aws-java-sdk-api-gateway:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon CloudFront (com.amazonaws:aws-java-sdk-cloudfront:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon CloudSearch (com.amazonaws:aws-java-sdk-cloudsearch:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon CloudWatch (com.amazonaws:aws-java-sdk-cloudwatch:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon CloudWatch Events (com.amazonaws:aws-java-sdk-events:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon CloudWatch Logs (com.amazonaws:aws-java-sdk-logs:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Cognito Identity (com.amazonaws:aws-java-sdk-cognitoidentity:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Cognito Identity Provider Service (com.amazonaws:aws-java-sdk-cognitoidp:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Cognito Sync (com.amazonaws:aws-java-sdk-cognitosync:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon DynamoDB (com.amazonaws:aws-java-sdk-dynamodb:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon EC2 (com.amazonaws:aws-java-sdk-ec2:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon ElastiCache (com.amazonaws:aws-java-sdk-elasticache:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Elastic File System (com.amazonaws:aws-java-sdk-efs:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Elasticsearch Service (com.amazonaws:aws-java-sdk-elasticsearch:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Elastic Transcoder (com.amazonaws:aws-java-sdk-elastictranscoder:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon EMR (com.amazonaws:aws-java-sdk-emr:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Glacier (com.amazonaws:aws-java-sdk-glacier:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Inspector Service (com.amazonaws:aws-java-sdk-inspector:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Kinesis (com.amazonaws:aws-java-sdk-kinesis:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Machine Learning (com.amazonaws:aws-java-sdk-machinelearning:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon RDS (com.amazonaws:aws-java-sdk-rds:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Redshift (com.amazonaws:aws-java-sdk-redshift:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon Route53 (com.amazonaws:aws-java-sdk-route53:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon S3 (com.amazonaws:aws-java-sdk-s3:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon SES (com.amazonaws:aws-java-sdk-ses:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon SimpleDB (com.amazonaws:aws-java-sdk-simpledb:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon SNS (com.amazonaws:aws-java-sdk-sns:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon SQS (com.amazonaws:aws-java-sdk-sqs:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon SWF (com.amazonaws:aws-java-sdk-simpleworkflow:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Amazon WorkSpaces (com.amazonaws:aws-java-sdk-workspaces:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Auto Scaling (com.amazonaws:aws-java-sdk-autoscaling:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Certificate Manager (com.amazonaws:aws-java-sdk-acm:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS CloudFormation (com.amazonaws:aws-java-sdk-cloudformation:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS CloudTrail (com.amazonaws:aws-java-sdk-cloudtrail:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS CodeCommit (com.amazonaws:aws-java-sdk-codecommit:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS CodeDeploy (com.amazonaws:aws-java-sdk-codedeploy:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS CodePipeline (com.amazonaws:aws-java-sdk-codepipeline:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Config (com.amazonaws:aws-java-sdk-config:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Database Migration Service (com.amazonaws:aws-java-sdk-dms:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Data Pipeline (com.amazonaws:aws-java-sdk-datapipeline:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Device Farm (com.amazonaws:aws-java-sdk-devicefarm:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Direct Connect (com.amazonaws:aws-java-sdk-directconnect:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Directory Service (com.amazonaws:aws-java-sdk-directory:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Elastic Beanstalk (com.amazonaws:aws-java-sdk-elasticbeanstalk:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS GameLift (com.amazonaws:aws-java-sdk-gamelift:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS IAM (com.amazonaws:aws-java-sdk-iam:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Import/Export (com.amazonaws:aws-java-sdk-importexport:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS IoT (com.amazonaws:aws-java-sdk-iot:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS KMS (com.amazonaws:aws-java-sdk-kms:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Lambda (com.amazonaws:aws-java-sdk-lambda:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Marketplace Commerce Analytics (com.amazonaws:aws-java-sdk-marketplacecommerceanalytics:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Marketplace Metering Service (com.amazonaws:aws-java-sdk-marketplacemeteringservice:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS OpsWorks (com.amazonaws:aws-java-sdk-opsworks:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Storage Gateway (com.amazonaws:aws-java-sdk-storagegateway:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS STS (com.amazonaws:aws-java-sdk-sts:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS Support (com.amazonaws:aws-java-sdk-support:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for AWS WAF (com.amazonaws:aws-java-sdk-waf:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for Elastic Load Balancing (com.amazonaws:aws-java-sdk-elasticloadbalancing:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for the Amazon EC2 Container Registry (com.amazonaws:aws-java-sdk-ecr:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for the Amazon EC2 Container Service (com.amazonaws:aws-java-sdk-ecs:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for the AWS CloudHSM (com.amazonaws:aws-java-sdk-cloudhsm:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS Java SDK for the AWS Simple Systems Management (SSM) Service (com.amazonaws:aws-java-sdk-ssm:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS SDK For Java (com.amazonaws:aws-java-sdk:1.10.77 - https://aws.amazon.com/sdkforjava)
        * AWS SDK for Java - Core (com.amazonaws:aws-java-sdk-core:1.10.77 - https://aws.amazon.com/sdkforjava)
        * Bean Validation API (javax.validation:validation-api:1.1.0.Final - http://beanvalidation.org)
        * BoneCP :: Core Library (com.jolbox:bonecp:0.8.0.RELEASE - http://jolbox.com/bonecp)
        * Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.5 - https://github.com/ben-manes/caffeine)
        * Calcite Core (org.apache.calcite:calcite-core:1.14.0 - https://calcite.apache.org/calcite-core)
        * Calcite Druid (org.apache.calcite:calcite-druid:1.10.0 - http://calcite.apache.org/calcite-druid)
        * Calcite Linq4j (org.apache.calcite:calcite-linq4j:1.10.0 - http://calcite.apache.org/calcite-linq4j)
        * Calcite Linq4j (org.apache.calcite:calcite-linq4j:1.14.0 - https://calcite.apache.org/calcite-linq4j)
        * carbonite (com.twitter:carbonite:1.5.0 - no url defined)
        * CDI APIs (javax.enterprise:cdi-api:1.0 - http://www.seamframework.org/Weld/cdi-api)
        * chill-java (com.twitter:chill-java:0.8.0 - https://github.com/twitter/chill)
        * ClassMate (com.fasterxml:classmate:1.3.1 - http://github.com/cowtowncoder/java-classmate)
        * CloudWatch Metrics for AWS Java SDK (com.amazonaws:aws-java-sdk-cloudwatchmetrics:1.10.77 - https://aws.amazon.com/sdkforjava)
        * Codec (commons-codec:commons-codec:1.3 - http://jakarta.apache.org/commons/codec/)
        * com.papertrail:profiler (com.papertrail:profiler:1.0.2 - https://github.com/papertrail/profiler)
        * commons-beanutils (commons-beanutils:commons-beanutils:1.7.0 - no url defined)
        * Commons BeanUtils Core (commons-beanutils:commons-beanutils-core:1.8.0 - http://commons.apache.org/beanutils/)
        * Commons CLI (commons-cli:commons-cli:1.2 - http://commons.apache.org/cli/)
        * Commons Codec (commons-codec:commons-codec:1.4 - http://commons.apache.org/codec/)
        * Commons Codec (commons-codec:commons-codec:1.6 - http://commons.apache.org/codec/)
        * Commons Compress (org.apache.commons:commons-compress:1.4.1 - http://commons.apache.org/compress/)
        * Commons Configuration (commons-configuration:commons-configuration:1.6 - http://commons.apache.org/${pom.artifactId.substring(8)}/)
        * Commons Daemon (commons-daemon:commons-daemon:1.0.13 - http://commons.apache.org/daemon/)
        * Commons DBCP (commons-dbcp:commons-dbcp:1.4 - http://commons.apache.org/dbcp/)
        * Commons IO (commons-io:commons-io:1.4 - http://commons.apache.org/io/)
        * Commons IO (commons-io:commons-io:2.4 - http://commons.apache.org/io/)
        * Commons Lang (commons-lang:commons-lang:2.5 - http://commons.apache.org/lang/)
        * Commons Lang (commons-lang:commons-lang:2.6 - http://commons.apache.org/lang/)
        * Commons Logging (commons-logging:commons-logging:1.1.3 - http://commons.apache.org/proper/commons-logging/)
        * Commons Math (org.apache.commons:commons-math:2.2 - http://commons.apache.org/math/)
        * Commons Math (org.apache.commons:commons-math3:3.1.1 - http://commons.apache.org/math/)
        * Commons Math (org.apache.commons:commons-math3:3.2 - http://commons.apache.org/proper/commons-math/)
        * Commons Net (commons-net:commons-net:3.1 - http://commons.apache.org/net/)
        * Commons Pool (commons-pool:commons-pool:1.5.4 - http://commons.apache.org/pool/)
        * Compress-LZF (com.ning:compress-lzf:1.0.2 - http://github.com/ning/compress)
        * Curator Client (org.apache.curator:curator-client:2.7.1 - http://curator.apache.org/curator-client)
        * Curator Client (org.apache.curator:curator-client:4.2.0 - http://curator.apache.org/curator-client)
        * Curator Framework (org.apache.curator:curator-framework:2.7.1 - http://curator.apache.org/curator-framework)
        * Curator Framework (org.apache.curator:curator-framework:4.2.0 - http://curator.apache.org/curator-framework)
        * Curator Recipes (org.apache.curator:curator-recipes:2.7.1 - http://curator.apache.org/curator-recipes)
        * Data Mapper for Jackson (org.codehaus.jackson:jackson-mapper-asl:1.9.13 - http://jackson.codehaus.org)
        * DataNucleus Core (org.datanucleus:datanucleus-core:4.1.17 - http://www.datanucleus.org/#/datanucleus-core)
        * DataNucleus JDO API plugin (org.datanucleus:datanucleus-api-jdo:4.2.4 - http://www.datanucleus.org/#/datanucleus-api-jdo)
        * DataNucleus RDBMS plugin (org.datanucleus:datanucleus-rdbms:4.1.19 - http://www.datanucleus.org/#/datanucleus-rdbms)
        * DataStax Java Driver for Apache Cassandra - Core (com.datastax.cassandra:cassandra-driver-core:3.1.2 - https://github.com/datastax/java-driver)
        * DataStax Java Driver for Apache Cassandra - Object Mapping (com.datastax.cassandra:cassandra-driver-mapping:3.1.2 - https://github.com/datastax/java-driver)
        * Digester (commons-digester:commons-digester:1.8 - http://jakarta.apache.org/commons/digester/)
        * Disruptor Framework (com.lmax:disruptor:3.3.0 - http://lmax-exchange.github.com/disruptor)
        * Disruptor Framework (com.lmax:disruptor:3.3.6 - http://lmax-exchange.github.com/disruptor)
        * Dropwizard (io.dropwizard:dropwizard-core:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-core)
        * Dropwizard Asset Bundle (io.dropwizard:dropwizard-assets:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-assets)
        * Dropwizard Configuration Support (io.dropwizard:dropwizard-configuration:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-configuration)
        * Dropwizard Jackson Support (io.dropwizard:dropwizard-jackson:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-jackson)
        * Dropwizard Jersey Support (io.dropwizard:dropwizard-jersey:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-jersey)
        * Dropwizard Jetty Support (io.dropwizard:dropwizard-jetty:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-jetty)
        * Dropwizard Lifecycle Support (io.dropwizard:dropwizard-lifecycle:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-lifecycle)
        * Dropwizard Logging Support (io.dropwizard:dropwizard-logging:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-logging)
        * Dropwizard Metrics Support (io.dropwizard:dropwizard-metrics:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-metrics)
        * Dropwizard Request Logging Support (io.dropwizard:dropwizard-request-logging:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-request-logging)
        * Dropwizard Servlet Support (io.dropwizard:dropwizard-servlets:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-servlets)
        * Dropwizard Utility Classes (io.dropwizard:dropwizard-util:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-util)
        * Dropwizard Validation Support (io.dropwizard:dropwizard-validation:1.3.5 - http://www.dropwizard.io/1.3.5/dropwizard-validation)
        * EL (commons-el:commons-el:1.0 - http://jakarta.apache.org/commons/el/)
        * Elasticsearch: Core (org.elasticsearch:elasticsearch:2.4.4 - http://nexus.sonatype.org/oss-repository-hosting.html/parent/elasticsearch)
        * Elasticsearch SecureSM (org.elasticsearch:securesm:1.0 - http://nexus.sonatype.org/oss-repository-hosting.html/securesm)
        * error-prone annotations (com.google.errorprone:error_prone_annotations:2.0.18 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations)
        * error-prone annotations (com.google.errorprone:error_prone_annotations:2.1.3 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations)
        * error-prone annotations (com.google.errorprone:error_prone_annotations:2.2.0 - http://nexus.sonatype.org/oss-repository-hosting.html/error_prone_parent/error_prone_annotations)
        * Esri Geometry API for Java (com.esri.geometry:esri-geometry-api:2.0.0 - https://github.com/Esri/geometry-api-java)
        * fastjson (com.alibaba:fastjson:1.2.29 - https://github.com/alibaba/fastjson)
        * fastutil (it.unimi.dsi:fastutil:6.5.6 - http://fasutil.dsi.unimi.it/)
        * Findbugs Annotations under Apache License (com.github.stephenc.findbugs:findbugs-annotations:1.3.9-1 - http://stephenc.github.com/findbugs-annotations)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:1.3.9 - http://findbugs.sourceforge.net/)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.0 - http://findbugs.sourceforge.net/)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.1 - http://findbugs.sourceforge.net/)
        * FindBugs-jsr305 (com.google.code.findbugs:jsr305:3.0.2 - http://findbugs.sourceforge.net/)
        * flux-core (org.apache.storm:flux-core:2.0.1-SNAPSHOT - https://storm.apache.org/flux/flux-core)
        * flux-wrappers (org.apache.storm:flux-wrappers:2.0.1-SNAPSHOT - https://storm.apache.org/flux/flux-wrappers)
        * Glassfish Jasper API (org.mortbay.jetty:jsp-api-2.1:6.1.14 - http://jetty.mortbay.org/project/modules/jsp-api-2.1)
        * Google Guice - Core Library (com.google.inject:guice:3.0 - http://code.google.com/p/google-guice/guice/)
        * Google Guice - Core Library (com.google.inject:guice:4.2.1 - https://github.com/google/guice/guice)
        * Google Guice - Extensions - AssistedInject (com.google.inject.extensions:guice-assistedinject:3.0 - http://code.google.com/p/google-guice/extensions-parent/guice-assistedinject/)
        * Google Guice - Extensions - Servlet (com.google.inject.extensions:guice-servlet:3.0 - http://code.google.com/p/google-guice/extensions-parent/guice-servlet/)
        * Graphite Integration for Metrics (io.dropwizard.metrics:metrics-graphite:3.2.6 - http://metrics.dropwizard.io/metrics-graphite/)
        * Gson (com.google.code.gson:gson:2.2.4 - http://code.google.com/p/google-gson/)
        * Gson (com.google.code.gson:gson:2.3.1 - http://code.google.com/p/google-gson/)
        * Gson (com.google.code.gson:gson:2.8.0 - https://github.com/google/gson/gson)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:11.0.2 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:14.0.1 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:16.0.1 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:17.0 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:18.0 - http://code.google.com/p/guava-libraries/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:19.0 - https://github.com/google/guava/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:23.5-jre - https://github.com/google/guava/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:25.1-android - https://github.com/google/guava/guava)
        * Guava: Google Core Libraries for Java (com.google.guava:guava:27.0.1-jre - https://github.com/google/guava/guava)
        * Guava InternalFutureFailureAccess and InternalFutures (com.google.guava:failureaccess:1.0.1 - https://github.com/google/guava/failureaccess)
        * Guava ListenableFuture only (com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava - https://github.com/google/guava/listenablefuture)
        * Hadoop Metrics2 Reporter for Dropwizard Metrics (com.github.joshelser:dropwizard-metrics-hadoop-metrics2-reporter:0.1.2 - https://github.com/joshelser/dropwizard-hadoop-metrics2)
        * hadoop-yarn-registry (org.apache.hadoop:hadoop-yarn-registry:2.7.1 - no url defined)
        * hadoop-yarn-server-applicationhistoryservice (org.apache.hadoop:hadoop-yarn-server-applicationhistoryservice:2.7.2 - no url defined)
        * hadoop-yarn-server-resourcemanager (org.apache.hadoop:hadoop-yarn-server-resourcemanager:2.7.2 - no url defined)
        * hadoop-yarn-server-web-proxy (org.apache.hadoop:hadoop-yarn-server-web-proxy:2.7.2 - no url defined)
        * hawtbuf (org.fusesource.hawtbuf:hawtbuf:1.10 - http://hawtbuf.fusesource.org/hawtbuf)
        * hawtbuf (org.fusesource.hawtbuf:hawtbuf:1.11 - http://hawtbuf.fusesource.org/hawtbuf)
        * hawtdispatch (org.fusesource.hawtdispatch:hawtdispatch:1.20 - http://hawtdispatch.fusesource.org/hawtdispatch/)
        * hawtdispatch (org.fusesource.hawtdispatch:hawtdispatch:1.22 - http://hawtdispatch.fusesource.org/hawtdispatch/)
        * hawtdispatch-transport (org.fusesource.hawtdispatch:hawtdispatch-transport:1.22 - http://hawtdispatch.fusesource.org/hawtdispatch-transport/)
        * HBase - Annotations (org.apache.hbase:hbase-annotations:1.1.1 - http://hbase.apache.org/hbase-annotations)
        * HBase - Client (org.apache.hbase:hbase-client:1.1.1 - http://hbase.apache.org/hbase-client)
        * HBase - Common (org.apache.hbase:hbase-common:1.1.1 - http://hbase.apache.org/hbase-common)
        * HBase - Hadoop Compatibility (org.apache.hbase:hbase-hadoop-compat:1.1.1 - http://hbase.apache.org/hbase-hadoop-compat)
        * HBase - Hadoop Two Compatibility (org.apache.hbase:hbase-hadoop2-compat:1.1.1 - http://hbase.apache.org/hbase-hadoop2-compat)
        * HBase - Prefix Tree (org.apache.hbase:hbase-prefix-tree:1.1.1 - http://hbase.apache.org/hbase-prefix-tree)
        * HBase - Procedure (org.apache.hbase:hbase-procedure:1.1.1 - http://hbase.apache.org/hbase-procedure)
        * HBase - Protocol (org.apache.hbase:hbase-protocol:1.1.1 - http://hbase.apache.org/hbase-protocol)
        * HBase - Server (org.apache.hbase:hbase-server:1.1.1 - http://hbase.apache.org/hbase-server)
        * Hibernate Validator Engine (org.hibernate:hibernate-validator:5.4.2.Final - http://hibernate.org/validator/hibernate-validator)
        * HikariCP (com.zaxxer:HikariCP:2.4.7 - https://github.com/brettwooldridge/HikariCP)
        * HikariCP (com.zaxxer:HikariCP:2.5.1 - https://github.com/brettwooldridge/HikariCP)
        * Hive CLI (org.apache.hive:hive-cli:2.3.4 - http://hive.apache.org/hive-cli)
        * Hive Common (org.apache.hive:hive-common:2.3.4 - http://hive.apache.org/hive-common)
        * Hive HCatalog Core (org.apache.hive.hcatalog:hive-hcatalog-core:2.3.4 - http://hive.apache.org/hive-hcatalog/hive-hcatalog-core)
        * Hive HCatalog Server Extensions (org.apache.hive.hcatalog:hive-hcatalog-server-extensions:2.3.4 - http://hive.apache.org/hive-hcatalog/hive-hcatalog-server-extensions)
        * Hive HCatalog Streaming (org.apache.hive.hcatalog:hive-hcatalog-streaming:2.3.4 - http://hive.apache.org/hive-hcatalog/hive-hcatalog-streaming)
        * Hive HCatalog Webhcat Java Client (org.apache.hive.hcatalog:hive-webhcat-java-client:2.3.4 - http://hive.apache.org/hive-hcatalog/hive-webhcat-java-client)
        * Hive Llap Client (org.apache.hive:hive-llap-client:2.3.4 - http://hive.apache.org/hive-llap-client)
        * Hive Llap Common (org.apache.hive:hive-llap-common:2.3.4 - http://hive.apache.org/hive-llap-common)
        * Hive Llap Server (org.apache.hive:hive-llap-server:2.3.4 - http://hive.apache.org/hive-llap-server)
        * Hive Llap Tez (org.apache.hive:hive-llap-tez:2.3.4 - http://hive.apache.org/hive-llap-tez)
        * Hive Metastore (org.apache.hive:hive-metastore:2.3.4 - http://hive.apache.org/hive-metastore)
        * Hive Query Language (org.apache.hive:hive-exec:2.3.4 - http://hive.apache.org/hive-exec)
        * Hive Serde (org.apache.hive:hive-serde:2.3.4 - http://hive.apache.org/hive-serde)
        * Hive Service (org.apache.hive:hive-service:2.3.4 - http://hive.apache.org/hive-service)
        * Hive Service RPC (org.apache.hive:hive-service-rpc:2.3.4 - http://hive.apache.org/hive-service-rpc)
        * Hive Shims (org.apache.hive:hive-shims:2.3.4 - http://hive.apache.org/hive-shims)
        * Hive Shims 0.23 (org.apache.hive.shims:hive-shims-0.23:2.3.4 - http://hive.apache.org/hive-shims-0.23)
        * Hive Shims Common (org.apache.hive.shims:hive-shims-common:2.3.4 - http://hive.apache.org/hive-shims-common)
        * Hive Shims Scheduler (org.apache.hive.shims:hive-shims-scheduler:2.3.4 - http://hive.apache.org/hive-shims-scheduler)
        * Hive Storage API (org.apache.hive:hive-storage-api:2.4.0 - https://www.apache.org/hive-storage-api/)
        * Hive Vector-Code-Gen Utilities (org.apache.hive:hive-vector-code-gen:2.3.4 - http://hive.apache.org/hive-vector-code-gen)
        * HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
        * htrace-core (org.apache.htrace:htrace-core:3.1.0-incubating - http://incubator.apache.org/projects/htrace.html)
        * htrace-core4 (org.apache.htrace:htrace-core4:4.0.1-incubating - http://incubator.apache.org/projects/htrace.html)
        * htrace-core4 (org.apache.htrace:htrace-core4:4.2.0-incubating - http://incubator.apache.org/projects/htrace.html)
        * J2EE Management 1.1 (org.apache.geronimo.specs:geronimo-j2ee-management_1.1_spec:1.0.1 - http://geronimo.apache.org/specs/geronimo-j2ee-management_1.1_spec)
        * j2html (com.j2html:j2html:1.0.0 - http://j2html.com)
        * J2ObjC Annotations (com.google.j2objc:j2objc-annotations:1.1 - https://github.com/google/j2objc/)
        * Jackson (org.codehaus.jackson:jackson-core-asl:1.9.13 - http://jackson.codehaus.org)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.4.0 - http://wiki.fasterxml.com/JacksonHome)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.5.0 - http://github.com/FasterXML/jackson)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.6.3 - http://github.com/FasterXML/jackson)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.9.0 - http://github.com/FasterXML/jackson)
        * Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.9.2 - http://github.com/FasterXML/jackson)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.4.3 - http://wiki.fasterxml.com/JacksonHome)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.5.3 - https://github.com/FasterXML/jackson)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.6.3 - https://github.com/FasterXML/jackson-core)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.8.1 - https://github.com/FasterXML/jackson-core)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.9.2 - https://github.com/FasterXML/jackson-core)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.9.6 - https://github.com/FasterXML/jackson-core)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.9.8 - https://github.com/FasterXML/jackson-core)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.4.3 - http://wiki.fasterxml.com/JacksonHome)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.5.3 - http://github.com/FasterXML/jackson)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.6.3 - http://github.com/FasterXML/jackson)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.9.2 - http://github.com/FasterXML/jackson)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.9.6 - http://github.com/FasterXML/jackson)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.9.8 - http://github.com/FasterXML/jackson)
        * Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.1 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.8.1 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.9.8 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson-dataformat-CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.5.3 - http://wiki.fasterxml.com/JacksonForCbor)
        * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.8.1 - https://github.com/FasterXML/jackson)
        * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.6 - https://github.com/FasterXML/jackson-dataformats-text)
        * Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.6 - https://github.com/FasterXML/jackson-datatypes-collections)
        * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.6 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
        * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.6 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
        * Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.6 - http://wiki.fasterxml.com/JacksonModuleJoda)
        * Jackson Integration for Metrics (io.dropwizard.metrics:metrics-json:3.1.0 - http://metrics.codahale.com/metrics-json/)
        * Jackson Integration for Metrics (io.dropwizard.metrics:metrics-json:4.0.2 - http://metrics.dropwizard.io/metrics-json)
        * Jackson-JAXRS-base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.9.6 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
        * Jackson-JAXRS-JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.6 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
        * Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.9.6 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson module: JAXB-annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.8.10 - http://github.com/FasterXML/jackson-module-jaxb-annotations)
        * Jackson module: JAXB Annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.6 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.6 - https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names)
        * jasper-compiler (tomcat:jasper-compiler:5.5.23 - http://tomcat.apache.org/jasper-compiler)
        * jasper-runtime (tomcat:jasper-runtime:5.5.23 - http://tomcat.apache.org/jasper-runtime)
        * Java Authentication SPI for Containers (org.apache.geronimo.specs:geronimo-jaspic_1.0_spec:1.0 - http://geronimo.apache.org/maven/specs/geronimo-jaspic_1.0_spec/1.0)
        * Java Concurrency Tools Core Library (org.jctools:jctools-core:2.0.1 - https://github.com/JCTools)
        * Java Libraries for Amazon Simple WorkFlow (com.amazonaws:aws-java-sdk-swf-libraries:1.10.77 - https://aws.amazon.com/sdkforjava)
        * javax.inject (javax.inject:javax.inject:1 - http://code.google.com/p/atinject/)
        * java-xmlbuilder (com.jamesmurty.utils:java-xmlbuilder:0.4 - http://code.google.com/p/java-xmlbuilder/)
        * JBoss Logging 3 (org.jboss.logging:jboss-logging:3.3.0.Final - http://www.jboss.org)
        * JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
        * JCommander (com.beust:jcommander:1.30 - http://beust.com/jcommander)
        * jdependency (org.vafer:jdependency:1.2 - http://github.com/tcurdt/jdependency)
        * JDO API (javax.jdo:jdo-api:3.0.1 - http://db.apache.org/jdo)
        * JDO API (org.datanucleus:javax.jdo:3.2.0-m3 - http://www.datanucleus.org/#/javax.jdo)
        * Jettison (org.codehaus.jettison:jettison:1.1 - no url defined)
        * Jetty SSLEngine (org.mortbay.jetty:jetty-sslengine:6.1.26 - http://jetty.mortbay.org)
        * jffi (com.github.jnr:jffi:1.2.10 - http://github.com/jnr/jffi)
        * JMS 1.1 (org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1 - http://geronimo.apache.org/specs/geronimo-jms_1.1_spec)
        * jnr-constants (com.github.jnr:jnr-constants:0.9.0 - http://github.com/jnr/jnr-constants)
        * jnr-ffi (com.github.jnr:jnr-ffi:2.0.7 - http://github.com/jnr/jnr-ffi)
        * Joda time (joda-time:joda-time:2.2 - http://joda-time.sourceforge.net)
        * Joda-Time (joda-time:joda-time:2.3 - http://www.joda.org/joda-time/)
        * Joda-Time (joda-time:joda-time:2.8.1 - http://www.joda.org/joda-time/)
        * Joda-Time (joda-time:joda-time:2.9.5 - http://www.joda.org/joda-time/)
        * Joda-Time (joda-time:joda-time:2.9.9 - http://www.joda.org/joda-time/)
        * jOOL (org.jooq:jool:0.9.12 - http://nexus.sonatype.org/oss-repository-hosting.html/jool)
        * JPam (net.sf.jpam:jpam:1.1 - http://jpam.sf.net)
        * JSON.simple (com.googlecode.json-simple:json-simple:1.1 - http://code.google.com/p/json-simple/)
        * JSON Small and Fast Parser (net.minidev:json-smart:2.3 - http://www.minidev.net/)
        * JTA 1.1 (org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1 - http://geronimo.apache.org/specs/geronimo-jta_1.1_spec)
        * JVM Integration for Metrics (io.dropwizard.metrics:metrics-jvm:3.1.0 - http://metrics.codahale.com/metrics-jvm/)
        * JVM Integration for Metrics (io.dropwizard.metrics:metrics-jvm:4.0.2 - http://metrics.dropwizard.io/metrics-jvm)
        * kafka-avro-serializer (io.confluent:kafka-avro-serializer:1.0 - http://confluent.io/kafka-avro-serializer)
        * kafka-schema-registry-client (io.confluent:kafka-schema-registry-client:1.0 - http://confluent.io/kafka-schema-registry-client)
        * Logging (commons-logging:commons-logging:1.0.3 - http://jakarta.apache.org/commons/logging/)
        * Lucene Common Analyzers (org.apache.lucene:lucene-analyzers-common:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-analyzers-common)
        * Lucene Core (org.apache.lucene:lucene-core:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-core)
        * Lucene Grouping (org.apache.lucene:lucene-grouping:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-grouping)
        * Lucene Highlighter (org.apache.lucene:lucene-highlighter:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-highlighter)
        * Lucene Join (org.apache.lucene:lucene-join:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-join)
        * Lucene Memory (org.apache.lucene:lucene-backward-codecs:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-backward-codecs)
        * Lucene Memory (org.apache.lucene:lucene-memory:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-memory)
        * Lucene Miscellaneous (org.apache.lucene:lucene-misc:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-misc)
        * Lucene Queries (org.apache.lucene:lucene-queries:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-queries)
        * Lucene QueryParsers (org.apache.lucene:lucene-queryparser:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-queryparser)
        * Lucene Sandbox (org.apache.lucene:lucene-sandbox:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-sandbox)
        * Lucene Spatial (org.apache.lucene:lucene-spatial:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-spatial)
        * Lucene Spatial 3D (org.apache.lucene:lucene-spatial3d:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-spatial3d)
        * Lucene Suggest (org.apache.lucene:lucene-suggest:5.5.2 - http://lucene.apache.org/lucene-parent/lucene-suggest)
        * LZ4 and xxHash (net.jpountz.lz4:lz4:1.3.0 - https://github.com/jpountz/lz4-java)
        * Maven Aether Provider (org.apache.maven:maven-aether-provider:3.0 - http://maven.apache.org/maven-aether-provider/)
        * Maven Artifact (org.apache.maven:maven-artifact:3.0 - http://maven.apache.org/maven-artifact/)
        * Maven Artifact (org.apache.maven:maven-artifact:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-artifact/)
        * Maven Artifact Resolver API (org.apache.maven.resolver:maven-resolver-api:1.3.1 - https://maven.apache.org/resolver/maven-resolver-api/)
        * Maven Artifact Resolver API (org.apache.maven.resolver:maven-resolver-api:1.3.3 - https://maven.apache.org/resolver/maven-resolver-api/)
        * Maven Artifact Resolver Connector Basic (org.apache.maven.resolver:maven-resolver-connector-basic:1.3.3 - https://maven.apache.org/resolver/maven-resolver-connector-basic/)
        * Maven Artifact Resolver Implementation (org.apache.maven.resolver:maven-resolver-impl:1.3.1 - https://maven.apache.org/resolver/maven-resolver-impl/)
        * Maven Artifact Resolver Implementation (org.apache.maven.resolver:maven-resolver-impl:1.3.3 - https://maven.apache.org/resolver/maven-resolver-impl/)
        * Maven Artifact Resolver Provider (org.apache.maven:maven-resolver-provider:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-resolver-provider/)
        * Maven Artifact Resolver SPI (org.apache.maven.resolver:maven-resolver-spi:1.3.1 - https://maven.apache.org/resolver/maven-resolver-spi/)
        * Maven Artifact Resolver SPI (org.apache.maven.resolver:maven-resolver-spi:1.3.3 - https://maven.apache.org/resolver/maven-resolver-spi/)
        * Maven Artifact Resolver Transport File (org.apache.maven.resolver:maven-resolver-transport-file:1.3.3 - https://maven.apache.org/resolver/maven-resolver-transport-file/)
        * Maven Artifact Resolver Transport HTTP (org.apache.maven.resolver:maven-resolver-transport-http:1.3.3 - https://maven.apache.org/resolver/maven-resolver-transport-http/)
        * Maven Artifact Resolver Utilities (org.apache.maven.resolver:maven-resolver-util:1.3.1 - https://maven.apache.org/resolver/maven-resolver-util/)
        * Maven Artifact Resolver Utilities (org.apache.maven.resolver:maven-resolver-util:1.3.3 - https://maven.apache.org/resolver/maven-resolver-util/)
        * Maven Builder Support (org.apache.maven:maven-builder-support:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-builder-support/)
        * Maven Core (org.apache.maven:maven-core:3.0 - http://maven.apache.org/maven-core/)
        * Maven Core (org.apache.maven:maven-core:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-core/)
        * Maven Model (org.apache.maven:maven-model:3.0 - http://maven.apache.org/maven-model/)
        * Maven Model (org.apache.maven:maven-model:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-model/)
        * Maven Model Builder (org.apache.maven:maven-model-builder:3.0 - http://maven.apache.org/maven-model-builder/)
        * Maven Model Builder (org.apache.maven:maven-model-builder:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-model-builder/)
        * Maven Plugin API (org.apache.maven:maven-plugin-api:3.0 - http://maven.apache.org/maven-plugin-api/)
        * Maven Plugin API (org.apache.maven:maven-plugin-api:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-plugin-api/)
        * Maven Plugin Tools Java Annotations (org.apache.maven.plugin-tools:maven-plugin-annotations:3.6.0 - https://maven.apache.org/plugin-tools/maven-plugin-annotations)
        * Maven Repository Metadata Model (org.apache.maven:maven-repository-metadata:3.0 - http://maven.apache.org/maven-repository-metadata/)
        * Maven Repository Metadata Model (org.apache.maven:maven-repository-metadata:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-repository-metadata/)
        * Maven Settings (org.apache.maven:maven-settings:3.0 - http://maven.apache.org/maven-settings/)
        * Maven Settings (org.apache.maven:maven-settings:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-settings/)
        * Maven Settings Builder (org.apache.maven:maven-settings-builder:3.0 - http://maven.apache.org/maven-settings-builder/)
        * Maven Settings Builder (org.apache.maven:maven-settings-builder:3.6.0 - https://maven.apache.org/ref/3.6.0/maven-settings-builder/)
        * Metrics Core (io.dropwizard.metrics:metrics-core:3.1.0 - http://metrics.codahale.com/metrics-core/)
        * Metrics Core (io.dropwizard.metrics:metrics-core:3.1.2 - http://metrics.codahale.com/metrics-core/)
        * Metrics Core (io.dropwizard.metrics:metrics-core:3.2.1 - http://metrics.codahale.com/metrics-core/)
        * Metrics Core (io.dropwizard.metrics:metrics-core:3.2.6 - http://metrics.dropwizard.io/metrics-core/)
        * Metrics Core Library (com.yammer.metrics:metrics-core:2.2.0 - http://metrics.codahale.com/metrics-core/)
        * Metrics Health Checks (io.dropwizard.metrics:metrics-healthchecks:4.0.2 - http://metrics.dropwizard.io/metrics-healthchecks)
        * Metrics Integration for Jersey 2.x (io.dropwizard.metrics:metrics-jersey2:4.0.2 - http://metrics.dropwizard.io/metrics-jersey2)
        * Metrics Integration for Jetty 9.3 and higher (io.dropwizard.metrics:metrics-jetty9:4.0.2 - http://metrics.dropwizard.io/metrics-jetty9)
        * Metrics Integration for Logback (io.dropwizard.metrics:metrics-logback:4.0.2 - http://metrics.dropwizard.io/metrics-logback)
        * Metrics Integration with JMX (io.dropwizard.metrics:metrics-jmx:4.0.2 - http://metrics.dropwizard.io/metrics-jmx)
        * Metrics Utility Servlets (io.dropwizard.metrics:metrics-servlets:4.0.2 - http://metrics.dropwizard.io/metrics-servlets)
        * MongoDB Java Driver (org.mongodb:mongo-java-driver:3.2.0 - http://www.mongodb.org)
        * mqtt-client (org.fusesource.mqtt-client:mqtt-client:1.10 - http://mqtt-client.fusesource.org/mqtt-client/)
        * mqtt-client (org.fusesource.mqtt-client:mqtt-client:1.14 - http://mqtt-client.fusesource.org/mqtt-client/)
        * multilang-javascript (org.apache.storm:multilang-javascript:2.0.1-SNAPSHOT - https://storm.apache.org/storm-multilang/multilang-javascript)
        * multilang-python (org.apache.storm:multilang-python:2.0.1-SNAPSHOT - https://storm.apache.org/storm-multilang/multilang-python)
        * multilang-ruby (org.apache.storm:multilang-ruby:2.0.1-SNAPSHOT - https://storm.apache.org/storm-multilang/multilang-ruby)
        * Netty/All-in-One (io.netty:netty-all:4.0.23.Final - http://netty.io/netty-all/)
        * Netty/All-in-One (io.netty:netty-all:4.0.42.Final - http://netty.io/netty-all/)
        * Netty/Buffer (io.netty:netty-buffer:4.0.37.Final - http://netty.io/netty-buffer/)
        * Netty/Codec (io.netty:netty-codec:4.0.37.Final - http://netty.io/netty-codec/)
        * Netty/Common (io.netty:netty-common:4.0.37.Final - http://netty.io/netty-common/)
        * Netty/Handler (io.netty:netty-handler:4.0.37.Final - http://netty.io/netty-handler/)
        * Netty/Transport (io.netty:netty-transport:4.0.37.Final - http://netty.io/netty-transport/)
        * Netty (io.netty:netty:3.10.6.Final - http://netty.io/)
        * Nimbus JOSE+JWT (com.nimbusds:nimbus-jose-jwt:4.41.1 - https://bitbucket.org/connect2id/nimbus-jose-jwt)
        * Noggit (org.noggit:noggit:0.6 - http://github.com/yonik/noggit)
        * Objenesis (org.objenesis:objenesis:2.1 - http://objenesis.org)
        * OkHttp (com.squareup.okhttp:okhttp:2.4.0 - https://github.com/square/okhttp/okhttp)
        * Okio (com.squareup.okio:okio:1.4.0 - https://github.com/square/okio/okio)
        * opencsv (net.sf.opencsv:opencsv:2.3 - http://opencsv.sf.net)
        * Open JSON (com.tdunning:json:1.8 - https://github.com/tdunning/open-json)
        * ORC Core (org.apache.orc:orc-core:1.3.3 - http://orc.apache.org/orc-core)
        * oro (oro:oro:2.0.8 - no url defined)
        * Plexus :: Component Annotations (org.codehaus.plexus:plexus-component-annotations:1.5.5 - http://plexus.codehaus.org/plexus-containers/plexus-component-annotations/)
        * Plexus :: Component Annotations (org.codehaus.plexus:plexus-component-annotations:1.7.1 - http://codehaus-plexus.github.io/plexus-containers/plexus-component-annotations/)
        * Plexus Cipher: encryption/decryption Component (org.sonatype.plexus:plexus-cipher:1.4 - http://spice.sonatype.org/plexus-cipher)
        * Plexus Classworlds (org.codehaus.plexus:plexus-classworlds:2.2.3 - http://plexus.codehaus.org/plexus-classworlds/)
        * Plexus Classworlds (org.codehaus.plexus:plexus-classworlds:2.5.2 - http://plexus.codehaus.org/plexus-classworlds/)
        * Plexus Common Utilities (org.codehaus.plexus:plexus-utils:3.1.0 - http://codehaus-plexus.github.io/plexus-utils/)
        * Plexus Interpolation API (org.codehaus.plexus:plexus-interpolation:1.14 - http://plexus.codehaus.org/plexus-components/plexus-interpolation)
        * Plexus Interpolation API (org.codehaus.plexus:plexus-interpolation:1.25 - http://codehaus-plexus.github.io/plexus-interpolation/)
        * Plexus Security Dispatcher Component (org.sonatype.plexus:plexus-sec-dispatcher:1.3 - http://spice.sonatype.org/plexus-sec-dispatcher)
        * Plexus Security Dispatcher Component (org.sonatype.plexus:plexus-sec-dispatcher:1.4 - http://spice.sonatype.org/plexus-sec-dispatcher)
        * Proton-J (org.apache.qpid:proton-j:0.18.0 - http://qpid.apache.org/proton/proton-j)
        * rest (org.elasticsearch.client:rest:5.2.2 - https://github.com/elastic/elasticsearch)
        * rocketmq-client 4.2.0 (org.apache.rocketmq:rocketmq-client:4.2.0 - http://rocketmq.apache.org/rocketmq-client/)
        * rocketmq-common 4.2.0 (org.apache.rocketmq:rocketmq-common:4.2.0 - http://rocketmq.apache.org/rocketmq-common/)
        * rocketmq-remoting 4.2.0 (org.apache.rocketmq:rocketmq-remoting:4.2.0 - http://rocketmq.apache.org/rocketmq-remoting/)
        * Shaded Deps for Storm Client (org.apache.storm:storm-shaded-deps:2.0.1-SNAPSHOT - https://storm.apache.org/storm-shaded-deps)
        * sigar (org.fusesource:sigar:1.6.4 - http://fusesource.com/sigar/)
        * Sisu - Guice (org.sonatype.sisu:sisu-guice:2.1.7 - http://forge.sonatype.com/sisu-guice/)
        * Sisu - Inject (JSR330 bean support) (org.sonatype.sisu:sisu-inject-bean:1.4.2 - http://sisu.sonatype.org/sisu-inject/guice-bean/sisu-inject-bean/)
        * Sisu - Inject (Plexus bean support) (org.sonatype.sisu:sisu-inject-plexus:1.4.2 - http://sisu.sonatype.org/sisu-inject/guice-bean/guice-plexus/sisu-inject-plexus/)
        * Slider Core (org.apache.slider:slider-core:0.90.2-incubating - http://slider.incubator.apache.org/slider-core/)
        * SnakeYAML (org.yaml:snakeyaml:1.11 - http://www.snakeyaml.org)
        * SnakeYAML (org.yaml:snakeyaml:1.15 - http://www.snakeyaml.org)
        * SnakeYAML (org.yaml:snakeyaml:1.18 - http://www.snakeyaml.org)
        * Snappy for Java (org.xerial.snappy:snappy-java:1.0.4.1 - http://code.google.com/p/snappy-java/)
        * Snappy for Java (org.xerial.snappy:snappy-java:1.0.5 - http://github.com/xerial/snappy-java/)
        * snappy-java (org.xerial.snappy:snappy-java:1.1.2.6 - https://github.com/xerial/snappy-java)
        * Spatial4J (com.spatial4j:spatial4j:0.5 - http://nexus.sonatype.org/oss-repository-hosting.html/spatial4j)
        * Spring AOP (org.springframework:spring-aop:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Beans (org.springframework:spring-beans:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Commons Logging Bridge (org.springframework:spring-jcl:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Context (org.springframework:spring-context:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Core (org.springframework:spring-core:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Expression Language (SpEL) (org.springframework:spring-expression:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring JMS (org.springframework:spring-jms:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Messaging (org.springframework:spring-messaging:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * Spring Transaction (org.springframework:spring-tx:5.1.5.RELEASE - https://github.com/spring-projects/spring-framework)
        * StAX API (stax:stax-api:1.0.1 - http://stax.codehaus.org/)
        * storm-autocreds (org.apache.storm:storm-autocreds:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-autocreds)
        * Storm Client (org.apache.storm:storm-client:2.0.1-SNAPSHOT - https://storm.apache.org/storm-client)
        * storm-clojure (org.apache.storm:storm-clojure:2.0.1-SNAPSHOT - https://storm.apache.org/storm-clojure)
        * Storm Core (org.apache.storm:storm-core:2.0.1-SNAPSHOT - https://storm.apache.org/storm-core)
        * storm-elasticsearch (org.apache.storm:storm-elasticsearch:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-elasticsearch)
        * storm-hbase (org.apache.storm:storm-hbase:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-hbase)
        * storm-hdfs (org.apache.storm:storm-hdfs:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-hdfs)
        * storm-hdfs-blobstore (org.apache.storm:storm-hdfs-blobstore:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-hdfs-blobstore)
        * storm-hive (org.apache.storm:storm-hive:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-hive)
        * storm-jdbc (org.apache.storm:storm-jdbc:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-jdbc)
        * storm-jms (org.apache.storm:storm-jms:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-jms)
        * storm-kafka-client (org.apache.storm:storm-kafka-client:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-kafka-client)
        * storm-metrics (org.apache.storm:storm-metrics:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-metrics)
        * storm-mongodb (org.apache.storm:storm-mongodb:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-mongodb)
        * storm-mqtt (org.apache.storm:storm-mqtt:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-mqtt)
        * storm-opentsdb (org.apache.storm:storm-opentsdb:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-opentsdb)
        * storm-pmml (org.apache.storm:storm-pmml:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-pmml)
        * storm-redis (org.apache.storm:storm-redis:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-redis)
        * storm-rocketmq (org.apache.storm:storm-rocketmq:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-rocketmq)
        * storm-server (org.apache.storm:storm-server:2.0.1-SNAPSHOT - https://storm.apache.org/storm-server)
        * storm-solr (org.apache.storm:storm-solr:2.0.1-SNAPSHOT - https://storm.apache.org/external/storm-solr)
        * storm-sql-runtime (org.apache.storm:storm-sql-runtime:2.0.1-SNAPSHOT - https://storm.apache.org/storm-sql-runtime)
        * T-Digest (com.tdunning:t-digest:3.0 - https://github.com/tdunning/t-digest)
        * Tephra API (co.cask.tephra:tephra-api:0.6.0 - https://github.com/caskdata/tephra/tephra-api)
        * Tephra Core (co.cask.tephra:tephra-core:0.6.0 - https://github.com/caskdata/tephra/tephra-core)
        * Tephra HBase 1.0 Compatibility (co.cask.tephra:tephra-hbase-compat-1.0:0.6.0 - https://github.com/caskdata/tephra/tephra-hbase-compat-1.0)
        * The Netty Project (io.netty:netty:3.6.2.Final - http://netty.io/)
        * The Netty Project (io.netty:netty:3.7.0.Final - http://netty.io/)
        * Woodstox (org.codehaus.woodstox:woodstox-core-asl:4.4.1 - http://woodstox.codehaus.org)
        * Xerces2 Java Parser (xerces:xercesImpl:2.9.1 - http://xerces.apache.org/xerces2-j)
        * XML Commons External Components XML APIs (xml-apis:xml-apis:1.3.04 - http://xml.apache.org/commons/components/external/)
        * zookeeper (org.apache.zookeeper:zookeeper:3.4.14 - no url defined)
        * zookeeper (org.apache.zookeeper:zookeeper:3.4.6 - no url defined)

    Apache License, Version 2.0, Common Development and Distribution License (CDDL) v1.1, Modified BSD, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-connectors-apache (org.glassfish.jersey.connectors:jersey-apache-connector:2.27 - https://jersey.github.io/project/jersey-apache-connector/)
        * jersey-container-grizzly2-http (org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.27 - https://jersey.github.io/project/jersey-container-grizzly2-http/)
        * jersey-container-grizzly2-servlet (org.glassfish.jersey.containers:jersey-container-grizzly2-servlet:2.27 - https://jersey.github.io/project/jersey-container-grizzly2-servlet/)
        * jersey-container-servlet (org.glassfish.jersey.containers:jersey-container-servlet:2.27 - https://jersey.github.io/project/jersey-container-servlet/)
        * jersey-container-servlet-core (org.glassfish.jersey.containers:jersey-container-servlet-core:2.27 - https://jersey.github.io/project/jersey-container-servlet-core/)
        * jersey-core-client (org.glassfish.jersey.core:jersey-client:2.27 - https://jersey.github.io/jersey-client/)
        * jersey-ext-entity-filtering (org.glassfish.jersey.ext:jersey-entity-filtering:2.27 - https://jersey.github.io/project/jersey-entity-filtering/)
        * jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.27 - https://jersey.github.io/project/jersey-hk2/)
        * jersey-media-jaxb (org.glassfish.jersey.media:jersey-media-jaxb:2.27 - https://jersey.github.io/project/jersey-media-jaxb/)

    Apache License, Version 2.0, Common Development and Distribution License (CDDL) v1.1, Modified BSD, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-server (org.glassfish.jersey.core:jersey-server:2.27 - https://jersey.github.io/jersey-server/)

    Apache License, Version 2.0, Common Development and Distribution License (CDDL) v1.1, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-common (org.glassfish.jersey.core:jersey-common:2.27 - https://jersey.github.io/jersey-common/)

    Apache License, Version 2.0, Common Development and Distribution License (CDDL) v1.1, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-media-json-jackson (org.glassfish.jersey.media:jersey-media-json-jackson:2.27 - https://jersey.github.io/project/jersey-media-json-jackson/)

    Apache License, Version 2.0, Eclipse Public License - Version 1.0

        * Jetty :: Aggregate :: All core Jetty (org.eclipse.jetty.aggregate:jetty-all:7.6.0.v20120127 - http://www.eclipse.org/jetty/jetty-aggregate-project/jetty-all)
        * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Continuation (org.eclipse.jetty:jetty-continuation:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Security (org.eclipse.jetty:jetty-security:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: SetUID Java (org.eclipse.jetty.toolchain.setuid:jetty-setuid-java:1.0.3 - http://www.eclipse.org/jetty/jetty-toolchain/jetty-setuid-parent/jetty-setuid-java)
        * Jetty :: Utilities :: Ajax(JSON) (org.eclipse.jetty:jetty-util-ajax:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.3.25.v20180904 - http://www.eclipse.org/jetty)
        * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.11.v20180605 - http://www.eclipse.org/jetty)
        * Jetty Orbit :: Servlet API (org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016 - http://www.eclipse.org/jetty/jetty-orbit/javax.servlet)
        * Jetty Server (org.mortbay.jetty:jetty:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/modules/jetty)
        * Jetty Utilities (org.mortbay.jetty:jetty-util:6.1.26 - http://www.eclipse.org/jetty/jetty-parent/project/jetty-util)

    Apache License, Version 2.0, GNU General Public License, version 2

        * RocksDB JNI (org.rocksdb:rocksdbjni:5.8.6 - http://rocksdb.org/)

    Apache License, Version 2.0, GNU Lesser General Public License (LGPL), Version 2.1

        * JAX-RS provider for JSON content type (org.codehaus.jackson:jackson-jaxrs:1.8.3 - http://jackson.codehaus.org)
        * JAX-RS provider for JSON content type (org.codehaus.jackson:jackson-jaxrs:1.9.13 - http://jackson.codehaus.org)
        * Xml Compatibility extensions for Jackson (org.codehaus.jackson:jackson-xc:1.8.3 - http://jackson.codehaus.org)
        * Xml Compatibility extensions for Jackson (org.codehaus.jackson:jackson-xc:1.9.13 - http://jackson.codehaus.org)

    Apache License, Version 2.0, LGPL 2.1, MPL 1.1

        * Javassist (org.javassist:javassist:3.20.0-GA - http://www.javassist.org/)
        * Javassist (org.javassist:javassist:3.22.0-GA - http://www.javassist.org/)

    BSD-2-Clause, Public Domain, per Creative Commons CC0

        * HdrHistogram (org.hdrhistogram:HdrHistogram:2.1.10 - http://hdrhistogram.github.io/HdrHistogram/)

    BSD 3-Clause License

        * ASM Commons (asm:asm-commons:3.1 - http://asm.objectweb.org/asm-commons/)
        * ASM Core (asm:asm:3.1 - http://asm.objectweb.org/asm/)
        * ASM Tree (asm:asm-tree:3.1 - http://asm.objectweb.org/asm-tree/)
        * Commons Compiler (org.codehaus.janino:commons-compiler:2.7.6 - http://docs.codehaus.org/display/JANINO/Home/commons-compiler)
        * Janino (org.codehaus.janino:janino:2.7.6 - http://docs.codehaus.org/display/JANINO/Home/janino)
        * JPMML evaluator (org.jpmml:pmml-evaluator:1.0.22 - http://www.jpmml.org/pmml-evaluator)
        * JPMML manager (org.jpmml:pmml-manager:1.0.22 - http://www.jpmml.org/pmml-manager)
        * JPMML model (org.jpmml:pmml-model:1.0.22 - http://www.jpmml.org/pmml-model)
        * JPMML schema (org.jpmml:pmml-schema:1.0.22 - http://www.jpmml.org/pmml-schema)
        * Kryo (com.esotericsoftware:kryo:3.0.3 - https://github.com/EsotericSoftware/kryo/kryo)
        * Kryo Shaded (com.esotericsoftware:kryo-shaded:3.0.3 - https://github.com/EsotericSoftware/kryo/kryo-shaded)
        * leveldbjni-all (org.fusesource.leveldbjni:leveldbjni-all:1.8 - http://leveldbjni.fusesource.org/leveldbjni-all)
        * MinLog (com.esotericsoftware:minlog:1.3.0 - https://github.com/EsotericSoftware/minlog)
        * Protocol Buffer Java API (com.google.protobuf:protobuf-java:2.5.0 - http://code.google.com/p/protobuf)
        * Protocol Buffers [Core] (com.google.protobuf:protobuf-java:3.1.0 - https://developers.google.com/protocol-buffers/protobuf-java/)
        * ReflectASM (com.esotericsoftware:reflectasm:1.10.1 - https://github.com/EsotericSoftware/reflectasm)

    BSD licence

        * ANTLR 3 Runtime (org.antlr:antlr-runtime:3.5.2 - http://www.antlr.org)
        * ANTLR ST4 4.0.4 (org.antlr:ST4:4.0.4 - http://www.stringtemplate.org)

    BSD License

        * ASM Analysis (org.ow2.asm:asm-analysis:5.0.3 - http://asm.objectweb.org/asm-analysis/)
        * ASM Analysis (org.ow2.asm:asm-analysis:6.0_BETA - http://asm.objectweb.org/asm-analysis/)
        * ASM Commons (org.ow2.asm:asm-commons:5.0.3 - http://asm.objectweb.org/asm-commons/)
        * ASM Commons (org.ow2.asm:asm-commons:6.0 - http://asm.objectweb.org/asm-commons/)
        * ASM Core (org.ow2.asm:asm:5.0.3 - http://asm.objectweb.org/asm/)
        * ASM Core (org.ow2.asm:asm:5.0.4 - http://asm.objectweb.org/asm/)
        * ASM Core (org.ow2.asm:asm:6.0 - http://asm.objectweb.org/asm/)
        * ASM Tree (org.ow2.asm:asm-tree:5.0.3 - http://asm.objectweb.org/asm-tree/)
        * ASM Tree (org.ow2.asm:asm-tree:6.0 - http://asm.objectweb.org/asm-tree/)
        * ASM Util (org.ow2.asm:asm-util:5.0.3 - http://asm.objectweb.org/asm-util/)
        * ASM Util (org.ow2.asm:asm-util:6.0_BETA - http://asm.objectweb.org/asm-util/)
        * Javolution (javolution:javolution:5.5.1 - http://javolution.org)
        * JLine (jline:jline:0.9.94 - http://jline.sourceforge.net)
        * JLine (jline:jline:2.12 - http://nexus.sonatype.org/oss-repository-hosting.html/jline)
        * ParaNamer Core (com.thoughtworks.paranamer:paranamer:2.3 - http://paranamer.codehaus.org/paranamer)
        * Stax2 API (org.codehaus.woodstox:stax2-api:3.1.4 - http://wiki.fasterxml.com/WoodstoxStax2)
        * xmlenc Library (xmlenc:xmlenc:0.52 - http://xmlenc.sourceforge.net)

    CC0 1.0 Universal

        * JSR166e (com.twitter:jsr166e:1.1.0 - http://github.com/twitter/jsr166e)

    Common Development and Distribution License

        * aopalliance version 1.0 repackaged as a module (org.glassfish.hk2.external:aopalliance-repackaged:2.5.0-b32 - https://hk2.java.net/external/aopalliance-repackaged)
        * aopalliance version 1.0 repackaged as a module (org.glassfish.hk2.external:aopalliance-repackaged:2.5.0-b42 - https://github.com/hk2-project/hk2/external/aopalliance-repackaged)
        * Expression Language 3.0 (org.glassfish:javax.el:3.0.0 - http://el-spec.java.net)
        * Expression Language 3.0 (org.glassfish:javax.el:3.0.1-b11 - http://uel.java.net)
        * grizzly-framework (org.glassfish.grizzly:grizzly-framework:2.4.3 - http://grizzly.java.net/grizzly-framework)
        * grizzly-http (org.glassfish.grizzly:grizzly-http:2.4.3 - http://grizzly.java.net/grizzly-http)
        * grizzly-http-server (org.glassfish.grizzly:grizzly-http-server:2.4.3 - http://grizzly.java.net/grizzly-http-server)
        * grizzly-http-servlet (org.glassfish.grizzly:grizzly-http-servlet:2.2.16 - http://grizzly.java.net/grizzly-http-servlet)
        * HK2 API module (org.glassfish.hk2:hk2-api:2.5.0-b32 - https://hk2.java.net/hk2-api)
        * HK2 API module (org.glassfish.hk2:hk2-api:2.5.0-b42 - https://github.com/hk2-project/hk2/hk2-api)
        * HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.5.0-b32 - https://hk2.java.net/hk2-utils)
        * HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.5.0-b42 - https://github.com/hk2-project/hk2/hk2-utils)
        * JavaServer Pages(TM) API (javax.servlet.jsp:javax.servlet.jsp-api:2.3.1 - http://jsp.java.net)
        * Java Servlet API (javax.servlet:javax.servlet-api:3.1.0 - http://servlet-spec.java.net)
        * Java Servlet API (javax.servlet:javax.servlet-api:4.0.0 - https://javaee.github.io/servlet-spec/)
        * javax.annotation API (javax.annotation:javax.annotation-api:1.2 - http://jcp.org/en/jsr/detail?id=250)
        * javax.annotation API (javax.annotation:javax.annotation-api:1.3.2 - http://jcp.org/en/jsr/detail?id=250)
        * javax.inject:1 as OSGi bundle (org.glassfish.hk2.external:javax.inject:2.5.0-b32 - https://hk2.java.net/external/javax.inject)
        * javax.inject:1 as OSGi bundle (org.glassfish.hk2.external:javax.inject:2.5.0-b42 - https://github.com/hk2-project/hk2/external/javax.inject)
        * jersey-container-servlet-core (org.glassfish.jersey.containers:jersey-container-servlet-core:2.25.1 - https://jersey.java.net/project/jersey-container-servlet-core/)
        * jersey-core-client (org.glassfish.jersey.core:jersey-client:2.25.1 - https://jersey.java.net/jersey-client/)
        * jersey-core-common (org.glassfish.jersey.core:jersey-common:2.25.1 - https://jersey.java.net/jersey-common/)
        * jersey-core-server (org.glassfish.jersey.core:jersey-server:2.25.1 - https://jersey.java.net/jersey-server/)
        * jersey-media-jaxb (org.glassfish.jersey.media:jersey-media-jaxb:2.25.1 - https://jersey.java.net/project/jersey-media-jaxb/)
        * jersey-repackaged-guava (org.glassfish.jersey.bundles.repackaged:jersey-guava:2.25.1 - https://jersey.java.net/project/project/jersey-guava/)
        * JSP implementation (org.glassfish.web:javax.servlet.jsp:2.3.2 - http://jsp.java.net)
        * 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.5.0-b32 - https://hk2.java.net/hk2-locator)
        * ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.5.0-b42 - https://github.com/hk2-project/hk2/hk2-locator)

    Common Development and Distribution License (CDDL) v1.0

        * Glassfish Jasper (org.mortbay.jetty:jsp-2.1:6.1.14 - http://jetty.mortbay.org/project/modules/jsp-2.1)
        * JavaBeans(TM) Activation Framework (javax.activation:activation:1.1.1 - http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp)
        * JavaBeans Activation Framework (JAF) (javax.activation:activation:1.1 - http://java.sun.com/products/javabeans/jaf/index.jsp)
        * JavaMail API (javax.mail:mail:1.4.1 - https://glassfish.dev.java.net/javaee5/mail/)
        * JSR-250 Common Annotations for the JavaTM Platform (javax.annotation:jsr250-api:1.0 - http://jcp.org/aboutJava/communityprocess/final/jsr250/index.html)
        * Servlet Specification 2.5 API (org.mortbay.jetty:servlet-api-2.5:6.1.14 - http://jetty.mortbay.org/project/modules/servlet-api-2.5)

    Common Development and Distribution License (CDDL) v1.0, GNU General Public Library

        * Streaming API for XML (javax.xml.stream:stax-api:1.0-2 - no url defined)

    Common Development and Distribution License (CDDL) v1.1

        * Java Message Service (javax.jms:jms:1.1 - http://java.sun.com/products/jms)
        * Java Transaction API (javax.transaction:jta:1.1 - http://java.sun.com/products/jta)
        * jersey-bom (org.glassfish.jersey:jersey-bom:2.27 - http://java.net/jersey-bom/)
        * jsp-api (javax.servlet:jsp-api:2.0 - no url defined)
        * jsp-api (javax.servlet.jsp:jsp-api:2.1 - no url defined)
        * servlet-api (javax.servlet:servlet-api:2.5 - no url defined)
        * transaction-api (javax.transaction:transaction-api:1.1 - no url defined)

    Common Development and Distribution License (CDDL) v1.1, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * javax.ws.rs-api (javax.ws.rs:javax.ws.rs-api:2.0.1 - http://jax-rs-spec.java.net)
        * javax.ws.rs-api (javax.ws.rs:javax.ws.rs-api:2.1 - http://jax-rs-spec.java.net)
        * jaxb-api (javax.xml.bind:jaxb-api:2.3.0 - https://github.com/javaee/jaxb-spec/jaxb-api)
        * JAXB API bundle for GlassFish V3 (javax.xml.bind:jaxb-api:2.2.2 - https://jaxb.dev.java.net/)
        * JAXB Reference Implementation (com.sun.xml.bind:jaxb-impl:2.2.6 - http://jaxb.java.net/)
        * JAXB RI (com.sun.xml.bind:jaxb-impl:2.2.3-1 - http://jaxb.java.net/)
        * jersey-client (com.sun.jersey:jersey-client:1.9 - https://jersey.java.net/jersey-client/)
        * jersey-core (com.sun.jersey:jersey-core:1.9 - https://jersey.java.net/jersey-core/)
        * jersey-grizzly2 (com.sun.jersey:jersey-grizzly2:1.19.4 - https://jersey.java.net/jersey-grizzly2/)
        * jersey-guice (com.sun.jersey.contribs:jersey-guice:1.9 - https://jersey.java.net/jersey-contribs/jersey-guice/)
        * jersey-json (com.sun.jersey:jersey-json:1.9 - https://jersey.java.net/jersey-json/)
        * jersey-server (com.sun.jersey:jersey-server:1.9 - https://jersey.java.net/jersey-server/)

    Common Public License Version 1.0, GNU General Public License Version 2, GNU Lesser General Public License (LGPL), Version 2.1

        * jnr-posix (com.github.jnr:jnr-posix:3.0.27 - http://nexus.sonatype.org/oss-repository-hosting.html/jnr-posix)

    Eclipse Public License, Version 1.0

        * Aether Utilities (org.eclipse.aether:aether-util:0.9.0.M2 - http://www.eclipse.org/aether/aether-util/)
        * clojure (org.clojure:clojure:1.3.0-beta1 - http://clojure.org/)
        * JUnit (junit:junit:4.12 - http://junit.org)
        * org.eclipse.sisu.inject (org.eclipse.sisu:org.eclipse.sisu.inject:0.3.3 - http://www.eclipse.org/sisu/org.eclipse.sisu.inject/)
        * org.eclipse.sisu.plexus (org.eclipse.sisu:org.eclipse.sisu.plexus:0.3.3 - http://www.eclipse.org/sisu/org.eclipse.sisu.plexus/)
        * tools.logging (org.clojure:tools.logging:0.2.3 - http://nexus.sonatype.org/oss-repository-hosting.html/pom.contrib/tools.logging)

    Eclipse Public License, Version 1.0, GNU Lesser General Public License

        * Logback Classic Module (ch.qos.logback:logback-classic:1.2.3 - http://logback.qos.ch/logback-classic)

    GNU General Public License, version 2 (GPL2), with the classpath exception, MIT License

        * Checker Qual (org.checkerframework:checker-compat-qual:2.0.0 - http://checkerframework.org)
        * Checker Qual (org.checkerframework:checker-qual:2.0.0 - http://checkerframework.org)

    MIT License

        * Animal Sniffer Annotations (org.codehaus.mojo:animal-sniffer-annotations:1.14 - http://mojo.codehaus.org/animal-sniffer/animal-sniffer-annotations)
        * Animal Sniffer Annotations (org.codehaus.mojo:animal-sniffer-annotations:1.17 - http://www.mojohaus.org/animal-sniffer/animal-sniffer-annotations)
        * argparse4j (net.sourceforge.argparse4j:argparse4j:0.8.1 - http://argparse4j.github.io)
        * azure-eventhubs (com.microsoft.azure:azure-eventhubs:0.13.1 - https://github.com/Azure/azure-event-hubs/)
        * Checker Qual (org.checkerframework:checker-qual:2.5.2 - https://checkerframework.org)
        * JCL 1.1.1 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.7 - http://www.slf4j.org)
        * JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.25 - http://www.slf4j.org)
        * JCodings (org.jruby.jcodings:jcodings:1.0.18 - http://nexus.sonatype.org/oss-repository-hosting.html/jcodings)
        * JCodings (org.jruby.jcodings:jcodings:1.0.8 - no url defined)
        * Jedis (redis.clients:jedis:2.9.0 - https://github.com/xetorthio/jedis)
        * jnr-x86asm (com.github.jnr:jnr-x86asm:1.0.2 - http://github.com/jnr/jnr-x86asm)
        * Joni (org.jruby.joni:joni:2.1.11 - http://nexus.sonatype.org/oss-repository-hosting.html/joni)
        * Joni (org.jruby.joni:joni:2.1.2 - http://nexus.sonatype.org/oss-repository-hosting.html/joni)
        * JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.25 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.6.6 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.10 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.12 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.13 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.21 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.22 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.25 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.5 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.6 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.7 - http://www.slf4j.org)
        * SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.6.6 - http://www.slf4j.org)
        * SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.10 - http://www.slf4j.org)
        * SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.25 - http://www.slf4j.org)

    Mozilla Public License Version 1.1

        * jamon-runtime (org.jamon:jamon-runtime:2.3.1 - http://www.jamon.org/jamon-runtime/)

    Mozilla Public License Version 2.0

        * jamon-runtime (org.jamon:jamon-runtime:2.4.1 - http://www.jamon.org/jamon-java-parent/jamon-runtime/)

    Public Domain

        * AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
        * XZ for Java (org.tukaani:xz:1.0 - http://tukaani.org/xz/java.html)

    Public Domain, per Creative Commons CC0

        * HdrHistogram (org.hdrhistogram:HdrHistogram:2.1.6 - http://hdrhistogram.github.io/HdrHistogram/)

    Revised BSD

        * JSch (com.jcraft:jsch:0.1.54 - http://www.jcraft.com/jsch/)

    Similar to Apache License but with the acknowledgment clause removed

        * JDOM (org.jdom:jdom2:2.0.6 - http://www.jdom.org)
