Using an Apache Edgent binary release bundle

Apache Edgent is supported on several Java target platforms.
For more information see JAVA_SUPPORT.md 

See Getting Started https://edgent.apache.org/docs/edgent-getting-started for
information about using this binary release to develop applications that
use Edgent.

Apache Edgent is released under the Apache License Version 2.0.
This Apache Edgent binary release includes a number of subcomponents with
separate copyright notices and license terms. It includes some binary content
with associated EPL and CDDL licenses.  See LICENSE for details.

Apache Edgent is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Incubator PMC. 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.
