Dependency Management for ABS (An introduction)

Introduction

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

Maven's primary goal is to allow a developer to comprehend the complete state of a development effort in the shortest period of time. In order to attain this goal there are several areas of concern that Maven attempts to deal with:

  • Making the build process easy
  • Providing a uniform build system
  • Providing quality project information
  • Providing guidelines for best practices development
  • Allowing transparent migration to new features

Please consult http://maven.apache.org for general organisation and usage of Maven.

Motivation

ABS is an executable modelling language designed for specifying, modelling and executing adaptable systems. The tools and techniques for analysing and using ABS are centred around the HATS methodology for Software Product Line Engineering (SPLE).

SPLE applies the concept of variabilities between versions of software system whereby generic artifacts (with variabilities) are kept in an artifact repository of the product line for reuse. Maven dependency management provides the technological implementation to push/pull/maintain such artifacts in this repository.

Using Maven

Maven is - at its heart - a plugin execution framework; all work is done by plugins. We have consequently developed a Maven plugin for ABS (abs-maven-plugin) that provides the following functionalities

  • Generate Java from ABS (see genjava goal)
  • Generate Maude from ABS (see genmaude goal)
  • Execute (simulate) Java/Maude generated from ABS (see javatest and maudetest goal)

In addition, Maven as a framework offers the functionalities to package, deploy artifacts to repositories and generate package dependencies for Eclipse integraton.