These instructions describe how to build platform independent components of Boundless Suite.
The following base software packages are required.
- Java 8 - Java Development Kit (JDK) - 1.8+ or Open JDK
- Apache Ant - 1.8+
- Apache Ivy - 2.3+
- Git - 1.7.10+*
Some modules require additional packages:
- Apache Maven - 3.0+
- JSTools - Latest
- Sphinx - 1.0+ (the full build requires LaTeX support)
- NodeJS - Latest version
Ensure that all the above are installed so that the associated executables are on the
PATH
of the user building the suite.
If you just want to build suite locally, and do not intend to contribute changes, you can skip this section and proceed to the Quickstart.
-
Fork the suite projuct to your github account. This fork will be used to stage your changes.
-
Clone your fork of suite in the desktop:
% git clone git://github.com/<yourusername>/suite.git suite % cd suite
-
Add an upstream remote pointing to the boundless suite project:
% git remote add upstream https://www.github.com/boundlessgeo/suite.git suite
-
This remote will be used to update your fork of suite to the latest from the boundless suie repository. Any time you want to get the latest changes, simply pull from the upstream remote:
% git pull upstream master
Suite includes code from several other projects by way of Git Submodules. Most suite submodules are in geoserver/externals. Submodules function like a link to a specific revision of a project. When using git on the desktop, submodules behave like single files as long as you are outside of them. However, they can be traversed like directories and once inside a submodule, git behaves as if you are in a checkout of the submodule project itself.
-
When inside a submodule, you can update the revision it links to by pulling from a remote. Many submodules link to a specific branch, so make sure you get the right one (ask a developer if you are unsure)!
% cd geoserver/externals/geoserver % git pull origin 2.7.x
-
In order for this update to be reflected in the suite project, it must be commited like any other change:
% cd ../ % git add geoserver % git commit -m "update geoserver submodule"
-
You can then push this change to your fork and create a pull request, like any other commit.
During regular development, suite changes are commited to the master branch. Prior to a release, a release branch (of the form r4.7
) is created. Any changes should be made against that branch instead, and backported to master if necessary.
-
When commiting a change to the release branch, note the commit id:
[r4.7 0c66de5] update geoserver submodule
-
To backport this commit to master, switch to the master branch and use
cherry-pick
to copy the commit. Remember to push your change up to the suite repository:% git checkout master % git cherry-pick 0c66de5 % git push upstream master
Certain submodules (mainly geoserver) will also have release specific branches. If you are updating a submodule on the release branch, first check if it has its own branch for this release (usually of the form suite-4.7
). Ask a developer if you are unsure.
To build suite, go to step 2 of the Quickstart.
For more information about the build system, see the Build System Overview.
For information on the individual components that comprise suite, follow the links in the Modules section.
-
Clone the repository:
% git clone git://github.com/boundlessgeo/suite.git suite % cd suite
-
Initialize submodule dependencies:
% git submodule update --init --recursive
-
Do a full build:
% ant
-
Or build the module of your choice:
% cd docs % ant
The suite repository is made up a number of modules (ie projects). During development typically modules are built individually as opposed to all at once. The primary build tool for suite is Ant. For some modules the ant script delegates to the modules native build tool such as Maven or Sphinx.
All top level modules have a build.xml
that defines the following targets:
build
- Builds the project, the result of this is something deployable in the development environment. This target is the default.clean
- Cleans the project deleting all build artifacts.assemble
- Assembles the project into a zip archive suitable for deployment in production. This is the artifact consumed by installer builders.publish
- Publishes the zip archive to a final location.all
- Runs all the above targets.
Building for development purposes typically looks like:
ant clean build
Building for deployment purposes typically looks like:
ant clean build assemble
Or to build everything:
ant all
The highest level build files simply delegate to the lower level build files. This means that performing a top level build and performing a build for a specific module will result in the same artifacts being produced for that module.
The build directory contains common build files used by modules.
- common.xml - Common ant targets used by module build files. Every module build file imports this file as the first step.
- build.properties - Default build properties that can be overridden on a global or per module basis.
- build_properties.py - Used by the doc build to parse properties from build.properties into the suite build environment.
Many aspects of the suite build such as file locations, executable names, etc... are parameterized into build properties. The default build.properties contains a list of default values. Often these default properties must be overridden to cater to the environment (eg. Windows vs Unix) or to cater to specifics of a particular module.
There are two ways to override build properties:
-
The first is to specify them directly to the ant build command with the Java system property (-D) syntax. For example:
% ant -Dsuite.build_cat=release build
-
Creating a file named
local.properties
either at the global level or at the module level. The globallocal.properties
is located in the build directory next tobuild.properties
. Module specificlocal.properties
files are located next to the modulebuild.xml
file. Naturally the module specific local properties file overrides properties from its global counterpart.
Using any combination of the above method it should never be necessary to modify the build.properties
file directly.
The build.properties file should be modified when development begins on a new suite version, in order to update the appropriate version numbers and geosserver extensions.
To build suite with a specific minor version assigned to geotools, geowebcache, and geoserver (instead of -SNAPSHOT), use the build/versions.xml ant script to set a custom version. For example, to build suite 4.9-beta1:
% ant -f build/versions.xml set-versions -Dsuite.minor_version=-beta1
% ant all -Dsuite.minor_version=-beta1
To undo this action and reset te versions back to -SNAPSHOT:
% git reset --hard HEAD
% git submodule foreach --recursive git reset --hard
Occasionally, we will have to build (or re-build) an extension or jar after a suite release has gone out. I will be using Suite 4.9.1 as the suite version for the purposes of this example.
-
Checkout the correct suite branch and update submodules:
% git checkout r4.9.1 % git submodule update --init --recursive
-
Set the suite version for the geoserver artifacts:
% ant -f build/versions.xml set-versions -Dsuite.minor_version=-suite-4.9.1
-
If you are building an extension that does not normally ship with suite, modify
build/build.properties
and add that module togs.exts_core
orgs.exts_comm
(depending upon whether or not it is a community module). -
Change to the
geoserver
directory and run a build.% cd geoserver % ant clean build assemble -Dsuite.minor_version=-suite-4.9.1
-
The geoserver artifacts will be in
geoserver/geoserver/src/target/release
. The suite war will be inwebapp/target
.
The suite repository is composed of the following modules:
Consult the module README files for module specific information.