Skip to content

Maven Plugin

Release a Java project to a maven repository.

Installation

This plugin is not included with the auto CLI installed via NPM. To install:

npm i --save-dev @auto-it/maven
# or
yarn add -D @auto-it/maven
npm i --save-dev @auto-it/maven
# or
yarn add -D @auto-it/maven

WARNING: You can only use one "package manager" at a time! Mixing them will lead to undesired results.

Usage

This plugin makes recursive changes to all pom.xml files in the project, with the following assumptions: a. The project is a multi-module project. b. The parent pom.xml file is located in the root directory of the repo. c. The parent pom.xml contains the version. d. Sub-modules have the same version as the parent pom.xml.

auto will detect if the parent pom.xml file has the versions-maven-plugin configured, and if so, use it to set the version on the parent and all child pom.xml files. If not, then auto will modify the parent and all child pom.xml files using a DOM parser and XML serializer. This has the effect of losing formatting. Therefore it then runs the serialized XML through the prettier "html" pretty-printer.

This means that if the versions-maven-plugin isn't available, the pom.xml files will be pretty-printed using prettier formatter with the following default settings:

  • printWidth: 120 (configurable - see below)
  • tabWidth: 4 (configurable - see below)
  • parser: "html"
{
  "plugins": [
    [
      "maven",
      {
        // An optional maven binary cmd/path
        // @default /usr/bin/mvn
        "mavenCommand": "mvn",

        // An optional maven argument list - e.g. any maven option allowed for the version
        // of maven you're using
        // @default []
        "mavenOptions": ["-DskipTests", "-P some-profile"],

        // An optional set of goals to execute for release
        // @default ["deploy", "site-deploy"]
        "mavenReleaseGoals": ["deploy"],

        // An optional path to a maven settings.xml file
        // @default ""
        "mavenSettings": "./.github/maven/settings.xml",

        // An optional printWidth for the prettier pretty-printer
        // @default 120
        "printWidth": 80,

        // An optional tabWidth for the prettier pretty-printer
        // @default 4
        "tabWidth": 4
      }
    ]
    // other plugins
  ]
}
{
  "plugins": [
    [
      "maven",
      {
        // An optional maven binary cmd/path
        // @default /usr/bin/mvn
        "mavenCommand": "mvn",

        // An optional maven argument list - e.g. any maven option allowed for the version
        // of maven you're using
        // @default []
        "mavenOptions": ["-DskipTests", "-P some-profile"],

        // An optional set of goals to execute for release
        // @default ["deploy", "site-deploy"]
        "mavenReleaseGoals": ["deploy"],

        // An optional path to a maven settings.xml file
        // @default ""
        "mavenSettings": "./.github/maven/settings.xml",

        // An optional printWidth for the prettier pretty-printer
        // @default 120
        "printWidth": 80,

        // An optional tabWidth for the prettier pretty-printer
        // @default 4
        "tabWidth": 4
      }
    ]
    // other plugins
  ]
}

Environment Variables

NameDescriptionDefault value
MAVEN_COMMANDThe Maven command to use./usr/bin/mvn
MAVEN_OPTIONSA list of maven command customizations to pass to maven.null
MAVEN_RELEASE_GOALSA list of maven goals to pass to maven for release.["deploy", "site-deploy"]
MAVEN_SETTINGSThe maven settings.xml file used by maven.null
MAVEN_USERNAME(DEPRECATED IN 9.38.0 ) The deploy username used to login to the repository.null
MAVEN_PASSWORD(DEPRECATED IN 9.38.0 ) The deploy password used to login to the repository.null

NOTE: The MAVEN_USERNAME and MAVEN_PASSWORD environment variables are still supported, and have their counterparts as configuration options, but should be deprecated, and will be removed in a later release. This is because MAVEN_SETTINGS or MAVEN_OPTIONS can do the same work, but provide a much more flexible solution.

Maven Project Configuration

You will need all the following configuration blocks for all parts of auto to function:

  1. Author
<developers>
    <developer>
        <name>Andrew Lisowski</name>
        <email>test@email.com</email>
    </developer>
</developers>
<developers>
    <developer>
        <name>Andrew Lisowski</name>
        <email>test@email.com</email>
    </developer>
</developers>
  1. SCM
<scm>
    <connection
  >scm:git:https://${env.GH_USER}:${env.GH_TOKEN}@github.com/Fuego-Tools/java-test-project.git</connection>
    <developerConnection
  >scm:git:https://${env.GH_USER}:${env.GH_TOKEN}@github.com/Fuego-Tools/java-test-project.git</developerConnection>
    <url>https://github.com/Fuego-Tools/java-test-project</url>
    <tag>HEAD</tag>
</scm>
<scm>
    <connection
  >scm:git:https://${env.GH_USER}:${env.GH_TOKEN}@github.com/Fuego-Tools/java-test-project.git</connection>
    <developerConnection
  >scm:git:https://${env.GH_USER}:${env.GH_TOKEN}@github.com/Fuego-Tools/java-test-project.git</developerConnection>
    <url>https://github.com/Fuego-Tools/java-test-project</url>
    <tag>HEAD</tag>
</scm>
  1. Versions Maven Plugin RECOMMENDED (Optional)
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.7</version>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.7</version>
</plugin>

⚠️ Don't forget to set enviornment variables GH_USER, GH_TOKEN

  1. Version
<version>1.0.0-SNAPSHOT</version>
<version>1.0.0-SNAPSHOT</version>