GeoMesa Development

This chapter describes how to build GeoMesa from source and provides an overview of the process of developing GeoMesa.

Using Maven

The GeoMesa project uses Apache Maven as a build tool. The Maven project’s Maven in 5 Minutes provides a quick introduction to getting started with its mvn executable.

Building from Source

These development tools are required:

The GeoMesa source distribution may be cloned from GitHub:

$ git clone
$ cd geomesa

This downloads the latest development version. To check out the code for the latest stable release ($VERSION = 2.3.2):

$ git checkout tags/geomesa-$VERSION -b geomesa-$VERSION

Building and dependency management for GeoMesa is handled by Maven. The Maven pom.xml file in the root directory of the source distribution contains a list of dependent libraries that will be bundled together for each module of the program. Build using the mvn executable:

$ mvn clean install

The skipTests property may be used to reduce build time, as it omits the test phase of the build process:

$ mvn clean install -DskipTests

To compile for Google Bigtable, use the bigtable profile:

$ mvn clean install -Pbigtable

The build/mvn script is a wrapper around Maven that builds the project using the Zinc incremental compiler:

$ build/mvn clean install -DskipTests


For the most part, GeoMesa is written in Scala, and is compiled with Scala 2.11.7.

Using the Scala Console

To test and interact with core functionality, the Scala console can be invoked in a couple of ways. For example, by running this command in the root source directory:

$ mvn scala:console -pl geomesa-accumulo/geomesa-accumulo-datastore

The Scala console will start, and all of the project packages in geomesa-accumulo-datastore will be loaded along with JavaConversions and JavaConverters.

GeoMesa Project Structure

  • geomesa-accumulo: DataStore implementation for Apache Accumulo
  • geomesa-archetypes: Template modules for Maven builds
  • geomesa-arrow: Apache Arrow integration and DataStore implementation
  • geomesa-bigtable: DataStore implementation for Google Bigtable
  • geomesa-blobstore: Accumulo-backed store designed for large files which have associated spatio-temporal data
  • geomesa-cassandra: DataStore implementation for Apache Cassandra
  • geomesa-convert: Configurable and extensible library for converting arbitrary data into SimpleFeatures
  • geomesa-features: Custom implementations and serialization of SimpleFeatures
  • geomesa-filter: Library for manipulating and working with GeoTools Filters
  • geomesa-fs: DataStore implementation for flat files
  • geomesa-geojson: API and REST-ful web service for working directly with GeoJSON
  • geomesa-hbase: DataStore implementation for Apache HBase
  • geomesa-index-api: Core indexing and DataStore code
  • geomesa-jobs: Map/reduce integration
  • geomesa-jupyter: Jupyter notebook integration
  • geomesa-kafka: DataStore implementation for Apache Kafka, for near-real-time streaming data
  • geomesa-lambda: DataStore implementation that seamlessly uses Kafka for frequent updates and Accumulo for long-term persistence
  • geomesa-memory: In-memory indexing code
  • geomesa-metrics: Extensions and configuration for DropWizard metrics integration
  • geomesa-native-api: Non-GeoTools API for persisting and querying data in Accumulo
  • geomesa-process: Analytic processes optimized for GeoMesa stores
  • geomesa-security: API for managing security and authorization levels in GeoMesa
  • geomesa-spark: Apache Spark integration
  • geomesa-stream: DataStore implementation that reads features from arbitrary URLs
  • geomesa-test: Integration testing scripts
  • geomesa-tools: Command-line tools for ingesting, querying and managing data in GeoMesa
  • geomesa-utils: Common utility code
  • geomesa-web: REST-ful web services for integrating with GeoMesa
  • geomesa-z3: Z3 space-filling-curve implementation
  • geomesa-zk-utils: Zookeeper utility code