
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/)
        * Log4j Implemented Over SLF4J (org.slf4j:log4j-over-slf4j:1.7.26 - 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.4 - http://commons.apache.org/proper/commons-cli/)
        * Apache Commons Codec (commons-codec:commons-codec:1.11 - 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 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.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.8.5 - no url defined)
        * Apache Hadoop Archives (org.apache.hadoop:hadoop-archives:2.8.5 - 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.8.5 - 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 ApplicationHistoryService (org.apache.hadoop:hadoop-yarn-server-applicationhistoryservice: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 NodeManager (org.apache.hadoop:hadoop-yarn-server-nodemanager:2.8.5 - no url defined)
        * Apache Hadoop YARN Registry (org.apache.hadoop:hadoop-yarn-registry:2.8.5 - no url defined)
        * Apache Hadoop YARN ResourceManager (org.apache.hadoop:hadoop-yarn-server-resourcemanager: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 Hadoop YARN Web Proxy (org.apache.hadoop:hadoop-yarn-server-web-proxy: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.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.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.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.11.2 - https://logging.apache.org/log4j/2.x/log4j-1.2-api/)
        * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.11.2 - https://logging.apache.org/log4j/2.x/log4j-api/)
        * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.11.2 - https://logging.apache.org/log4j/2.x/log4j-core/)
        * Apache Log4j SLF4J Binding (org.apache.logging.log4j:log4j-slf4j-impl:2.11.2 - https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
        * Apache Log4j Web (org.apache.logging.log4j:log4j-web:2.11.2 - https://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.13.0 - 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)
        * AutoService (com.google.auto.service:auto-service:1.0-rc4 - https://github.com/google/auto/auto-service)
        * 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:2.0.1.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 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 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-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:4.2.0 - http://curator.apache.org/curator-client)
        * Curator Framework (org.apache.curator:curator-framework:4.2.0 - http://curator.apache.org/curator-framework)
        * Curator Recipes (org.apache.curator:curator-recipes:4.2.0 - 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.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.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: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/)
        * 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: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: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)
        * 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.22 - http://hawtdispatch.fusesource.org/hawtdispatch/)
        * hawtdispatch-transport (org.fusesource.hawtdispatch:hawtdispatch-transport:1.22 - http://hawtdispatch.fusesource.org/hawtdispatch-transport/)
        * Hibernate Validator Engine (org.hibernate:hibernate-validator:5.4.2.Final - http://hibernate.org/validator/hibernate-validator)
        * Hibernate Validator Engine (org.hibernate.validator:hibernate-validator:6.0.17.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-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.9.0 - http://github.com/FasterXML/jackson)
        * 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.9.8 - http://github.com/FasterXML/jackson)
        * Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.9.8 - 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-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.8 - https://github.com/FasterXML/jackson-dataformats-text)
        * Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.8 - https://github.com/FasterXML/jackson-datatypes-collections)
        * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
        * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
        * Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.8 - 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.8 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
        * Jackson-JAXRS-JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.9.8 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
        * Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.9.8 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson module: JAXB Annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.8 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8 - 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.27 - http://beust.com/jcommander)
        * 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.3 - 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.2.6 - http://metrics.dropwizard.io/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/)
        * Netty/All-in-One (io.netty:netty-all:4.1.30.Final - http://netty.io/netty-all/)
        * Netty/Buffer (io.netty:netty-buffer:4.1.30.Final - http://netty.io/netty-buffer/)
        * Netty/Codec (io.netty:netty-codec:4.1.30.Final - http://netty.io/netty-codec/)
        * Netty/Common (io.netty:netty-common:4.1.30.Final - http://netty.io/netty-common/)
        * Netty/Handler (io.netty:netty-handler:4.1.30.Final - http://netty.io/netty-handler/)
        * Netty/Resolver (io.netty:netty-resolver:4.1.30.Final - http://netty.io/netty-resolver/)
        * Netty/Transport (io.netty:netty-transport:4.1.30.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)
        * Objenesis (org.objenesis:objenesis:2.6 - 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/)
        * 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)
        * 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/)
        * 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/)
        * 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, BSD 2-Clause, Eclipse Distribution License, Version 1.0, Eclipse Public License, Version 2.0, jQuery license, MIT License, Modified BSD, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception, W3C license

        * jersey-connectors-apache (org.glassfish.jersey.connectors:jersey-apache-connector:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-apache-connector)
        * jersey-container-grizzly2-http (org.glassfish.jersey.containers:jersey-container-grizzly2-http:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-grizzly2-http)
        * jersey-container-grizzly2-servlet (org.glassfish.jersey.containers:jersey-container-grizzly2-servlet:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-grizzly2-servlet)
        * jersey-container-servlet (org.glassfish.jersey.containers:jersey-container-servlet:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-servlet)
        * jersey-container-servlet-core (org.glassfish.jersey.containers:jersey-container-servlet-core:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-container-servlet-core)
        * jersey-core-client (org.glassfish.jersey.core:jersey-client:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-client)
        * jersey-ext-bean-validation (org.glassfish.jersey.ext:jersey-bean-validation:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-bean-validation)
        * jersey-ext-entity-filtering (org.glassfish.jersey.ext:jersey-entity-filtering:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-entity-filtering)
        * jersey-ext-metainf-services (org.glassfish.jersey.ext:jersey-metainf-services:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-metainf-services)
        * jersey-inject-hk2 (org.glassfish.jersey.inject:jersey-hk2:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-hk2)
        * jersey-media-jaxb (org.glassfish.jersey.media:jersey-media-jaxb:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/project/jersey-media-jaxb)

    Apache License, Version 2.0, Eclipse Public License, Version 2.0, Modified BSD, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-server (org.glassfish.jersey.core:jersey-server:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-server)

    Apache License, Version 2.0, Eclipse Public License, Version 2.0, Public Domain, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-core-common (org.glassfish.jersey.core:jersey-common:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/jersey-common)

    Apache License, Version 2.0, Eclipse Public License, Version 2.0, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * jersey-media-json-jackson (org.glassfish.jersey.media:jersey-media-json-jackson:2.29 - https://projects.eclipse.org/projects/ee4j.jersey/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.14.v20181114 - 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.4.14.v20181114 - 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.4.14.v20181114 - 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.4.14.v20181114 - 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.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.14.v20181114 - http://www.eclipse.org/jetty)
        * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.14.v20181114 - 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.18.3 - 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.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)
        * 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

        * 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)
        * 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)
        * javax.annotation API (javax.annotation:javax.annotation-api:1.3.2 - http://jcp.org/en/jsr/detail?id=250)
        * JSP implementation (org.glassfish.web:javax.servlet.jsp:2.3.2 - http://jsp.java.net)

    Common Development and Distribution License (CDDL) v1.0

        * JavaBeans(TM) Activation Framework (javax.activation:activation:1.1.1 - http://java.sun.com/javase/technologies/desktop/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)

    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)
        * 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)
        * jaxb-api (javax.xml.bind:jaxb-api:2.3.0 - https://github.com/javaee/jaxb-spec/jaxb-api)
        * 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-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 Distribution License, Version 1.0

        * jakarta.xml.bind-api (jakarta.xml.bind:jakarta.xml.bind-api:2.3.2 - https://github.com/eclipse-ee4j/jaxb-api/jakarta.xml.bind-api)
        * JavaBeans Activation Framework (com.sun.activation:jakarta.activation:1.2.1 - https://github.com/eclipse-ee4j/jaf/jakarta.activation)
        * JavaBeans Activation Framework API jar (jakarta.activation:jakarta.activation-api:1.2.1 - https://github.com/eclipse-ee4j/jaf/jakarta.activation-api)

    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.10.0 - http://clojure.org/)
        * core.specs.alpha (org.clojure:core.specs.alpha:0.2.44 - https://github.com/clojure/build.poms/core.specs.alpha)
        * 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/)
        * spec.alpha (org.clojure:spec.alpha:0.2.176 - https://github.com/clojure/build.poms/spec.alpha)
        * 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 2.0

        * grizzly-framework (org.glassfish.grizzly:grizzly-framework:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-framework)
        * grizzly-http (org.glassfish.grizzly:grizzly-http:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http)
        * grizzly-http-server (org.glassfish.grizzly:grizzly-http-server:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http-server)
        * grizzly-http-servlet (org.glassfish.grizzly:grizzly-http-servlet:2.4.4 - https://projects.eclipse.org/projects/ee4j.grizzly/grizzly-http-servlet)

    Eclipse Public License, Version 2.0, The GNU General Public License (GPL), Version 2, With Classpath Exception

        * aopalliance version 1.0 repackaged as a module (org.glassfish.hk2.external:aopalliance-repackaged:2.5.0 - https://github.com/eclipse-ee4j/glassfish-hk2/external/aopalliance-repackaged)
        * Expression Language 3.0 (org.glassfish:jakarta.el:3.0.2 - https://projects.eclipse.org/projects/ee4j.el)
        * Expression Language 3.0 API (jakarta.el:jakarta.el-api:3.0.2 - https://projects.eclipse.org/projects/ee4j.el)
        * HK2 API module (org.glassfish.hk2:hk2-api:2.5.0 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-api)
        * HK2 Implementation Utilities (org.glassfish.hk2:hk2-utils:2.5.0 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-utils)
        * jakarta.annotation API (jakarta.annotation:jakarta.annotation-api:1.3.4 - https://projects.eclipse.org/projects/ee4j.ca)
        * Java Servlet API (jakarta.servlet:jakarta.servlet-api:4.0.2 - https://projects.eclipse.org/projects/ee4j.servlet)
        * javax.inject:1 as OSGi bundle (org.glassfish.hk2.external:jakarta.inject:2.5.0 - https://github.com/eclipse-ee4j/glassfish-hk2/external/jakarta.inject)
        * javax.ws.rs-api (jakarta.ws.rs:jakarta.ws.rs-api:2.1.5 - https://github.com/eclipse-ee4j/jaxrs-api)
        * OSGi resource locator (org.glassfish.hk2:osgi-resource-locator:1.0.3 - https://projects.eclipse.org/projects/ee4j/osgi-resource-locator)
        * ServiceLocator Default Implementation (org.glassfish.hk2:hk2-locator:2.5.0 - https://github.com/eclipse-ee4j/glassfish-hk2/hk2-locator)

    Eclipse Public License (EPL) 1.0, GNU Lesser General Public License Version 2.1, February 1999

        * JGraphT - Core (org.jgrapht:jgrapht-core:0.9.0 - http://www.jgrapht.org/jgrapht-core)

    MIT License

        * 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)
        * 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)
        * JUL to SLF4J bridge (org.slf4j:jul-to-slf4j:1.7.25 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.26 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.6 - http://www.slf4j.org)
        * SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.26 - http://www.slf4j.org)
        * System Out and Err redirected to SLF4J (uk.org.lidalia:sysout-over-slf4j:1.0.2 - http://projects.lidalia.org.uk/sysout-over-slf4j/)

    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)

    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)
