
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.15 - http://activemq.apache.org/activemq-broker)
        * ActiveMQ :: Client (org.apache.activemq:activemq-client:5.15.15 - http://activemq.apache.org/activemq-client)
        * ActiveMQ :: KahaDB Store (org.apache.activemq:activemq-kahadb-store:5.15.15 - http://activemq.apache.org/activemq-kahadb-store)
        * ActiveMQ :: MQTT Protocol (org.apache.activemq:activemq-mqtt:5.15.15 - http://activemq.apache.org/activemq-mqtt)
        * ActiveMQ :: Openwire Legacy Support (org.apache.activemq:activemq-openwire-legacy:5.15.15 - 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.21 - 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.11.0 - https://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.8.0 - https://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.5 - http://hc.apache.org/httpcomponents-asyncclient)
        * Apache HttpClient (org.apache.httpcomponents:httpclient:4.5.13 - 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.13 - 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 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.5 - http://github.com/FasterXML/jackson)
        * Jackson-core (com.fasterxml.jackson.core:jackson-core:2.10.5 - https://github.com/FasterXML/jackson-core)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.10.5.1 - http://github.com/FasterXML/jackson)
        * jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.10.5 - http://github.com/FasterXML/jackson)
        * Jackson dataformat: CBOR (com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.5 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson dataformat: Smile (com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.10.5 - http://github.com/FasterXML/jackson-dataformats-binary)
        * Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.5 - https://github.com/FasterXML/jackson-dataformats-text)
        * Jackson datatype: Guava (com.fasterxml.jackson.datatype:jackson-datatype-guava:2.10.5 - https://github.com/FasterXML/jackson-datatypes-collections)
        * Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.5 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
        * Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.5 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
        * Jackson-datatype-Joda (com.fasterxml.jackson.datatype:jackson-datatype-joda:2.10.5 - 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.5 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-base)
        * Jackson-JAXRS-JSON (com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.10.5 - http://github.com/FasterXML/jackson-jaxrs-providers/jackson-jaxrs-json-provider)
        * Jackson module: Afterburner (com.fasterxml.jackson.module:jackson-module-afterburner:2.10.5 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson module: JAXB Annotations (com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.10.5 - https://github.com/FasterXML/jackson-modules-base)
        * Jackson-module-parameter-names (com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.5 - 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.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Beans (org.springframework:spring-beans:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Commons Logging Bridge (org.springframework:spring-jcl:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Context (org.springframework:spring-context:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Core (org.springframework:spring-core:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Expression Language (SpEL) (org.springframework:spring-expression:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring JMS (org.springframework:spring-jms:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Messaging (org.springframework:spring-messaging:5.3.18 - https://github.com/spring-projects/spring-framework)
        * Spring Transaction (org.springframework:spring-tx:5.3.18 - 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.45.v20220203 - https://eclipse.org/jetty/jetty-continuation)
        * Jetty :: Http Utility (org.eclipse.jetty:jetty-http:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-http)
        * Jetty :: IO Utility (org.eclipse.jetty:jetty-io:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-io)
        * Jetty :: Security (org.eclipse.jetty:jetty-security:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-security)
        * Jetty :: Server Core (org.eclipse.jetty:jetty-server:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-server)
        * Jetty :: Servlet Handling (org.eclipse.jetty:jetty-servlet:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-servlet)
        * 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.45.v20220203 - https://eclipse.org/jetty/jetty-util-ajax)
        * Jetty :: Utilities (org.eclipse.jetty:jetty-util:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-util)
        * Jetty :: Utility Servlets and Filters (org.eclipse.jetty:jetty-servlets:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-servlets)
        * Jetty :: Webapp Application Support (org.eclipse.jetty:jetty-webapp:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-webapp)
        * Jetty :: XML utilities (org.eclipse.jetty:jetty-xml:9.4.45.v20220203 - https://eclipse.org/jetty/jetty-xml)
        * 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)
