Semantic Version Annotation Processor https://github.com/ethauvin/semver
Find a file
Erik C. Thauvin e3706639f0 Added bintray tasks.
Added more javadoc options and comments.
2016-01-24 01:29:38 -08:00
example Added bintray tasks. 2016-01-24 01:29:38 -08:00
gradle/wrapper Initial commit. 2016-01-18 13:22:10 -08:00
src/main Added bintray tasks. 2016-01-24 01:29:38 -08:00
.gitignore Added bintray tasks. 2016-01-24 01:29:38 -08:00
build.gradle Added bintray tasks. 2016-01-24 01:29:38 -08:00
gradlew Initial commit. 2016-01-18 13:22:10 -08:00
gradlew.bat Initial commit. 2016-01-18 13:22:10 -08:00
README.html Added pandoc task. 2016-01-23 16:36:16 -08:00
README.md Added pandoc task. 2016-01-23 16:36:16 -08:00
semver.iml Added bintray tasks. 2016-01-24 01:29:38 -08:00
semver.ipr Added bintray tasks. 2016-01-24 01:29:38 -08:00
settings.gradle Initial commit. 2016-01-18 13:22:10 -08:00
version.properties First GitHub commit. 2016-01-23 18:19:05 -08:00

Semantic Version Annotation Processor

An annotation processor that automatically generates a Version class containing the semantic version (major, minor, patch, etc.) that is read from a Properties file or defined in the annotation.

This processor was inspired by Cédric Beust's version-processor.

Examples

  • Using annotation elements:
@Version(major = 1, minor = 0, patch = 0, prerelease = "beta")
public class A {
// ...
@Version(properties = "version.properties")
public class A {
// ...
# version.properties
version.major=1
version.minor=0
version.patch=0
version.prerelease=beta

Template

Upon running the annotator processor, a source file GeneratedVersion.java is automatically generated with static methods to access the semantic version data. The source is based on a fully customizable Velocity template.

@Version(template = "myversion.vm")
public class A {
// ...

Default Template

The default template implements the following static methods:

Method Description Example
getProject The project name, if any. MyProject
getBuildDate The build date. java.util.Date
getVersion The full version string. 1.0.0-alpha+001
getMajor The major version. 1
getMinor The minor version. 0
getPatch The patch version. 0
getPreRelease The pre-release version, if any. alpha
getBuildMetadata The build metadata, if any. 001

Custom Template

A very simple custom template might look something like:

/* myversion.vm */
package ${packageName}

import java.util.Date;

public final class ${className} {
	public final static String BUILDMETA = "${buildmeta}";
	public final static Date DATE = new Date(${epoch}L);
	public final static int MAJOR = ${major};
	public final static int MINOR = ${minor};
	public final static int PATCH = ${patch};
	public final static String PRERELEASE = "${prerelease}";
	public final static String PROJECT = "${project}";
}

The Velocity variables are automatically filled in by the processor.

Elements & Properties

The following annotation elements and properties are available:

Element Property Description Default
project version.project The project name.
major version.major The major version number. 1
minor version.major The minor version number. 0
patch version.patch The patch version number. 0
prerelease version.prerelease The pre-release version.
buildmeta version.buildmeta The build metadata version.
className The name of the generated class. GeneratedVersion
properties The properties file.
template The template file. version.vm

In order to easily incorporate with existing projects, the property keys may be assigned custom values:

@Version(
  properties = "example.properties", 
  majorKey = "example.major",
  minorKey = "example.minor",
  patchKey = "example.patch",
  prereleaseKey = "example.prerelease",
  buildmetaKey = "example.buildmeta",
  projectKey = "example.project"
)
public class Example {
// ...
# example.properties
example.project=Example
example.major=1
example.minor=0
example.patch=0
...