Expose Versions Maven Plugin

Exposes versions of a project and its framework parent via files and properties

Categories

Categories

Maven Build Tools
GroupId

GroupId

com.opentable
ArtifactId

ArtifactId

expose-versions-maven-plugin
Last Version

Last Version

1.6
Release Date

Release Date

Type

Type

maven-plugin
Description

Description

Expose Versions Maven Plugin
Exposes versions of a project and its framework parent via files and properties
Source Code Management

Source Code Management

http://github.com/opentable/otj-version-exposure-maven-plugin

Download expose-versions-maven-plugin

How to add to project

<plugin>
    <groupId>com.opentable</groupId>
    <artifactId>expose-versions-maven-plugin</artifactId>
    <version>1.6</version>
</plugin>

Dependencies

provided (4)

Group / Artifact Type Version
org.apache.maven : maven-plugin-api jar 3.3.9
org.apache.maven : maven-core jar 3.3.9
org.apache.maven : maven-artifact jar 3.3.9
org.apache.maven.plugin-tools : maven-plugin-annotations jar 3.6.0

runtime (1)

Group / Artifact Type Version
org.slf4j : jcl-over-slf4j jar 1.7.25

Project Modules

There are no modules declared in this project.

Expose Versions Maven Plugin

The expose versions Maven plugin is designed to help determine the versions of components and expose them, so that they can be accessible to other Maven plugins and to applications at runtime.

We basically have 2 types of projects: services and libraries. All of our projects use a common Maven parent POM. That POM is basically our framework, it manages the versions of all of our components.

This plugin does the following:

  • It takes the version of the project being built and stores it in a properties file it creates. This way we can access that file at runtime to get the version.
  • It exposes the version as a Maven property
  • If the project is a service, we find the version of the framework
    • We store the framework version in a properties file added to the built artifact
    • We expose the framework version as an artifact

We determine that a project is a service by checking for the existence of a specified Maven property.

Configuration

Property Description
outputDirectory This is where we should save version files to. This defaults to target/classes.
projectVersionFileName The name of the version file we write for the project. It is also used to create the property name (we append .version to it) that we stored the version number is as well. This defaults to the artifact ID.
serviceSignalProperty A Maven property that when present signals that this project is a service.
frameworkGroupId The group ID of the framework's Maven Parent POM
frameworkArtifactId The group ID of the framework's Maven Parent POM
frameworkPropertyName The group ID of the framework's Maven Parent POM
frameworkVersionFileName The group ID of the framework's Maven Parent POM
skip Should plugin execution be skipped

Example:

        <plugin>
            <groupId>com.opentable</groupId>
            <artifactId>expose-versions-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <serviceSignalProperty>services.have.this.property.set</serviceSignalProperty>
                <frameworkGroupId>com.opentable</frameworkGroupId>
                <frameworkArtifactId>framework</frameworkArtifactId>
                <frameworkPropertyName>framework.version</frameworkPropertyName>
                <frameworkVersionFileName>framework-version</frameworkVersionFileName>
                <skip>false</skip>
            </configuration>
        </plugin>

Using the configuration above, if a project with artifact ID sample-project with version 123 had the Maven property of services.have.this.property.set and had the com.opentable:framework parent with version 456, the following would happen:

  • A file called sample-project.properties would be created and would be accessible in the classpath. It would have one line: version=123.
  • A Maven property called sample-project.version would exist. It would be equal to 123.
  • A file called framework-version.properties would be created and would be accessible in the classpath. It would have one line: version=456.
  • A Maven property called framework.version would exist. It would be equal to 456.
com.opentable

OpenTable

Restaurant Reservations

Versions

Version
1.6