Overview
Grouper's internal build mechanism is handled via Gradle. The build is orchestrated by a parent build.gradle file for the root grouper project and a number of individual build.gradle file for every module that Grouper presently houses. Each build.gradle file inherits from the parent build.gradle file and in turn is able to specify its own requirements for dependency management and source tree structure. The list of Grouper modules that are recognized by the Gradle build is specified via a settings.gradle in a specific order to account for the build dependencies of the modules. There is also one gradle.properties file which hosts specific build settings for the project, such as groupid, java version and dependency versions used throughout the project.
Build
To run the full build, issue the following command at the root:
./gradlew build -x test -x javadoc --parallel --stacktrace
The same command can be used inside a specific module directory to build that module only.
The above command will use the Gradle wrapper to download an appropriate Gradle version once to be used for the build. This removes the requirement for a developer to explicitly have Gradle downloaded and installed, but if a Gradle installation is already available, the same command can be used via invoking the native Gradle instance installed. Build artifacts are produced for each module inside the build/libs directory. JAR files are produced for main, tests and javadoc.
./gradle build -x test -x javadoc --parallel --stacktrace
Windows Gradle Wrapper
Windows version of the wrapper command is also available as gradlew.bat
Gradle Wrapper Updates
The Gradle wrapper need only exist at the root of the project. The wrapper can be updated to note a specific newer version of a Gradle via the following command:
./gradle wrapper
Javadocs
To produce the Javadoc for the entire project, run the following command at the root:
./gradlew build alljavadoc -x test -x javadoc --parallel --stacktrace
The above command aggregates the javadocs for all grouper modules inside the root build/javadoc directory.
Travis CI Builds
Grouper is configured against Travis CI to execute the full build on every commit. Travis builds all grouper branches provided there is a .travis.yml inside the branch at the root of the repository. This is a YAML configuration file that tells Travis what version of Java should be available, which commands to use for the build lifecycle and which scripts to execute after a successful build.
Windows Gradle Wrapper
The configuration file must be massaged for every branch to tell Travis to limit the build to that branch only, for faster builds.
Publishing Javadocs
As part of the Travis CI build, Javadocs are published to the gh-pages of the repository once a successful builds. This is handled via the javadocs-ghpages.sh script that runs after the build. The script will attempt to collect all project javadocs and push them to the appropriate branch. In order for the push to succeed, an OAUTH token is made available to the script to do the job. The OAUTH token must be generated by a developer with push rights to the repo, and must be encrypted and placed inside the .travis.yml file under a "secure" heading.
Windows Gradle Wrapper
The script file must be massaged for every branch to tell Travis to limit the build to that branch only.