Building Edgent from a Source Distribution

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.

Apache Edgent is released under the Apache License Version 2.0.

Apache Edgent is supported on several Java target platforms.
For more information see JAVA_SUPPORT.md in the source tree
or in the ASF git repository https://git-wip-us.apache.org/repos/asf/incubator-edgent.git
or in the repository mirror at github https://github.com/apache/incubator-edgent.

Pre-requisites:
- Java 8 is required to build an Edgent binary distribution
- gradle (https://gradle.org/) only if building from a source release bundle

Building from a source release bundle (lacking a ./gradlew) requires
performing a one-time bootstrap step using an installed version of gradle:

$ gradle          # one time gradle build bootstrap setup.

Build an Edgent binary distribution:

$ ./gradlew release   # .\gradlew.bat on Windows

The build reports the location of the binary distribution bundle that can then
be unpacked and used in building applications.

See Getting Started https://edgent.apache.org/docs/edgent-getting-started

For more information about the Edgent sources, testing, and
contributing to Edgent runtime development see DEVELOPMENT.md in the source tree
or in the ASF git repository https://git-wip-us.apache.org/repos/asf/incubator-edgent.git
or in the repository mirror at github https://github.com/apache/incubator-edgent.
