Maven Use plugin¶
The Maven Use plugin packages Maven-based projects and, unlike the Maven plugin, deploys the artifact to an internal Maven repository. From this repository, the artifacts can be accessed by any other parts using the Maven or Maven Use plugins.
Keys¶
This plugin has no unique keys.
Attributes¶
This plugin supports the self-contained build attribute. Declaring this attribute
prevents access to the default Maven Central repository. All dependencies, including
plugins, must then be provided as build packages or in an earlier part.
When this attribute is declared, Maven Use may rewrite the version specification of project dependencies based on what is locally available. This can be avoided by provisioning the specified version prior to build time — for example, by building it with the Maven Use plugin in an earlier part. For more information on this behavior, see Version rewriting.
Dependencies¶
The Maven plugin needs the mvn executable to build Maven projects but does not
provision it to allow flexibility in the choice of version.
To provide mvn, one can either specify the maven Ubuntu package as a
build-package or define a maven-deps part. In the latter case, all
parts using Maven should declare that they come after the maven-deps part. The
plugin will then assume that the maven-deps part staged the mvn executable to
be used in the build step. This can be useful, for example, in cases where a specific,
unreleased version of Maven is desired but unavailable as a snap or Ubuntu package.
Version rewriting¶
When building a self-contained part, the Maven Use plugin selects dependency versions as follows:
If the version of the dependency specified in the project’s pom.xml file exists
locally, that version is selected.
If the requested version doesn’t exist locally, Maven Use compares the locally available versions that follow semantic versioning and selects the earliest subsequent release. If no such version is found, Maven Use selects the latest release that precedes the requested version.
If no prior conditions were satisfied, no version was requested, or the requested version couldn’t be interpreted as a semantic version, the latest locally-available release following semantic versioning is selected.
Finally, if no releases with semantic versions exist locally, the release that comes last alphabetically is selected.
How it works¶
During the build step the plugin performs the following actions:
Creates a Maven settings file that configures proxy settings, points to the local Maven repository created by Craft Parts, and, if the
self-containedbuild attribute is declared, disables network connections.Updates any of the project’s
pom.xmlfiles to deploy the final artifacts to the local repository.Calls
maven deployto build and deploy the project to the local repository.
Examples¶
The following snippet declares two parts: java-dep, which uses the maven-use
plugin, and java-main. Before java-main can build, the contents of java-dep
must be staged. This dependency is handled by declaring that java-main must build
after the java-dep part.
parts:
java-dep:
source: dep/
plugin: maven-use
build-packages:
- maven
java-main:
source: main/
plugin: maven
build-packages:
- maven
after:
- java-dep
The following snippet declares two parts: java-jacoco, which uses the maven-use
plugin, and java-main. To restrict access to the Maven Central repository, both
parts declare the self-contained build attribute. The pom.xml file of
java-main declares java-jacoco as a dependency, which is handled by declaring
that java-main must build after the java-jacoco part.
parts:
java-jacoco:
source: https://github.com/jacoco/jacoco.git
plugin: maven-use
build-packages:
- maven
build-attributes:
- self-contained
java-main:
source: .
plugin: maven
build-packages:
- maven
build-attributes:
- self-contained
after:
- java-jacoco