
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.36 - 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.5 - 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.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 1.x Compatibility API (org.apache.logging.log4j:log4j-1.2-api:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-1.2-api/)
        * Apache Log4j API (org.apache.logging.log4j:log4j-api:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-api/)
        * Apache Log4j Core (org.apache.logging.log4j:log4j-core:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-core/)
        * Apache Log4j SLF4J Binding (org.apache.logging.log4j:log4j-slf4j-impl:2.17.1 - https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/)
        * Apache Log4j Web (org.apache.logging.log4j:log4j-web:2.17.1 - 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)
        * Apache ZooKeeper - Jute (org.apache.zookeeper:zookeeper-jute:3.5.9 - http://zookeeper.apache.org/zookeeper-jute)
        * Apache ZooKeeper - Server (org.apache.zookeeper:zookeeper:3.5.9 - http://zookeeper.apache.org/zookeeper)
        * 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.3.0 - http://curator.apache.org/curator-client)
        * Curator Framework (org.apache.curator:curator-framework:4.3.0 - http://curator.apache.org/curator-framework)
        * Curator Recipes (org.apache.curator:curator-recipes:4.3.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.19 - http://www.dropwizard.io/1.3.19/dropwizard-core)
        * Dropwizard Asset Bundle (io.dropwizard:dropwizard-assets:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-assets)
        * Dropwizard Configuration Support (io.dropwizard:dropwizard-configuration:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-configuration)
        * Dropwizard Jackson Support (io.dropwizard:dropwizard-jackson:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-jackson)
        * Dropwizard Jersey Support (io.dropwizard:dropwizard-jersey:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-jersey)
        * Dropwizard Jetty Support (io.dropwizard:dropwizard-jetty:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-jetty)
        * Dropwizard Lifecycle Support (io.dropwizard:dropwizard-lifecycle:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-lifecycle)
        * Dropwizard Logging Support (io.dropwizard:dropwizard-logging:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-logging)
        * Dropwizard Metrics Support (io.dropwizard:dropwizard-metrics:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-metrics)
        * Dropwizard Request Logging Support (io.dropwizard:dropwizard-request-logging:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-request-logging)
        * Dropwizard Servlet Support (io.dropwizard:dropwizard-servlets:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-servlets)
        * Dropwizard Utility Classes (io.dropwizard:dropwizard-util:1.3.19 - http://www.dropwizard.io/1.3.19/dropwizard-util)
        * Dropwizard Validation Support (io.dropwizard:dropwizard-validation:1.3.19 - http://www.dropwizard.io/1.3.19/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.3.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.10.0 - http://github.com/FasterXML/jackson)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.10.0 - https://github.com/FasterXML/jackson-core)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.10.0 - http://github.com/FasterXML/jackson)
        * Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.10.0 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.0 - https://github.com/FasterXML/jackson-dataformats-text)
        * Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.10.0 - https://github.com/FasterXML/jackson-datatypes-collections)
        * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.0 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
        * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.0 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
        * Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.10.0 - 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.5 - http://metrics.dropwizard.io/metrics-json)
        * Jackson-JAXRS-base (com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:2.10.0 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
        * Jackson-JAXRS-JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.0 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
        * Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.10.0 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson module: JAXB Annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.0 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.0 - 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.2.6 - 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.5 - http://metrics.dropwizard.io/metrics-healthchecks)
        * Metrics Integration for Jersey 2.x (io.dropwizard.metrics:metrics-jersey2:4.0.5 - http://metrics.dropwizard.io/metrics-jersey2)
        * Metrics Integration for Jetty 9.3 and higher (io.dropwizard.metrics:metrics-jetty9:4.0.5 - http://metrics.dropwizard.io/metrics-jetty9)
        * Metrics Integration for Logback (io.dropwizard.metrics:metrics-logback:4.0.5 - http://metrics.dropwizard.io/metrics-logback)
        * Metrics Integration with JMX (io.dropwizard.metrics:metrics-jmx:4.0.5 - http://metrics.dropwizard.io/metrics-jmx)
        * Metrics Utility Servlets (io.dropwizard.metrics:metrics-servlets:4.0.5 - 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/Native/Epoll (io.netty:netty-transport-native-epoll:4.1.30.Final - http://netty.io/netty-transport-native-epoll/)
        * Netty/Transport/Native/Unix/Common (io.netty:netty-transport-native-unix-common:4.1.30.Final - http://netty.io/netty-transport-native-unix-common/)
        * 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)
        * reload4j (ch.qos.reload4j:reload4j:1.2.19 - https://reload4j.qos.ch)
        * 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.26 - 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.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.4 - 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.24.1-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-b12 - 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)
        * JCL 1.2 implemented over SLF4J (org.slf4j:jcl-over-slf4j:1.7.26 - 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.26 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.36 - http://www.slf4j.org)
        * SLF4J API Module (org.slf4j:slf4j-api:1.7.6 - http://www.slf4j.org)
        * SLF4J Reload4j Binding (org.slf4j:slf4j-reload4j:1.7.36 - http://reload4j.qos.ch)
        * 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)
