This page documents the set of requirements that the JBoss community builds should be working towards.
The current de-facto standard build tool for the JBoss community is Maven. Several projects use other build tools such as Ant or Gradle, but all builds must have the capability to interact with the JBoss community Maven repository (Maven Repository ). The current build environment for JBoss projects is not ideal due to several factors including limitations in Maven.
The build system cannot make assumptions about backwards or forwards compatibility between releases of a project based on the version numbers.
This sections describes the requirements for the build tool and related metadata.
Shared Artifact Repository
There must be a shared repository for released artifacts (such as jars, zips, and related metadata) and development artifacts such as nightly builds, etc.
This is currently handled by the JBoss.org Maven repository, however, the Maven repository format does have some limitations.
Some ideas for an improved artifact repository are listed in Java Module Repository Wishlist
All binary artifacts produced by a release build must be uniquely identifiable and never change over time. These artifacts should be available for consumption via a standard shared repository format.
Multiple Build Dependency Configurations
It must be possible to specific multiple sets of dependency configurations for each project build. For example, each project should have the option to build against either a known stable set of versions, or build against the latest set of development versions for dependency projects.
Record of Build Environment and Settings
Each build must be reproducible. This means that the release build must record the complete set of dependencies that were used during the build either by creating a snapshot of the repository or by recording a unique identifier for each artifact that was used during the build.
Build Instructions and Component Metadata
Build instructions includes information such as source code and configuration which is used to run a build, while component metadata is information such as xml or other configuration file which provides information necessary for consuming the component into other builds or runtimes.
This includes the set of steps required to produce the required build output such as jar files, documentation, and other artifacts.
Information about the component that does not change over time such as project name, version, and some for of unique identifier.
Information about the component that can change over time such as deprecation information, compatibility with new releases, and relocation information.
Ease of Use
In order for the build system to be acceptable in the Java community, it must have certain ease of use requirements.
There must be a standard set of commands used to run builds.
Repository metadata must be human readable.