Apache InLong is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Apache Incubator. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications, and decision
making process have stabilized in a manner consistent with other successful ASF projects.
While incubation status is not necessarily a reflection of the completeness or stability
of the code, it does indicate that the project has yet to be fully endorsed by the ASF.

Some of the incubating project's releases may not be fully compliant with ASF policy. For
example, releases may have incomplete or un-reviewed licensing conditions. What follows is
a list of known issues the project is currently aware of (note that this list, by definition,
is likely to be incomplete):

 * Releases may have incomplete licensing conditions

If you are planning to incorporate this work into your product/project, please be aware that
you will need to conduct a thorough licensing review to determine the overall implications of
including this work. For the current status of this project through the Apache Incubator
visit: https://incubator.apache.org/projects/inlong.html

1. mysql:mysql-connector-java    LICENSE: CATEGORY X
   In inlong-manager and inlong-tubemq/tubemq-manager, We use this component and it is a mandatory path dependency.
   we will remove it in subsequent versions or make it an optional path dependency

2. berkeleydb-je:berkeleydb-je   LICENSE: CATEGORY X
   In inlong-tubemq, we use this component and it is a mandatory path dependency.
   We will remove or make it an optional dependency in subsequent versions.