Deploy Configuration settings for Maven Central

Some Gerrit artifacts (e.g. the Gerrit WAR file, the Gerrit Plugin API and the Gerrit Extension API) are published on Maven Central in the com.google.gerrit repository.

To be able to publish artifacts to Maven Central some preparations must be done:

  • Create a Sonatype account as described in the Sonatype OSS Maven Repository Usage Guide.

    Sonatype is the company that runs Maven Central and you need a Sonatype account for uploading artifacts to Maven Central.

  • Configure your Sonatype user and password in ~/.m2/settings.xml:

    <server>
      <id>sonatype-nexus-staging</id>
      <username>USER</username>
      <password>PASSWORD</password>
    </server>
  • Request permissions to upload artifacts to the com.google.gerrit repository on Maven Central:

    Ask for this permission by adding a comment on the OSSRH-7392 Jira ticket at Sonatype.

    The request needs to be approved by someone who already has this permission by commenting on the same issue.

  • Generate and publish a PGP key

    Generate and publish a PGP key as described in How To Generate PGP Signatures With Maven.

    Please be aware that after publishing your public key it may take a while until it is visible to the Sonatype server.

    The PGP key is needed to be able to sign the artifacts before the upload to Maven Central.

    The PGP passphrase can be put in ~/.m2/settings.xml:

    <settings>
      <profiles>
        <profile>
          <id>gpg</id>
          <properties>
            <gpg.executable>gpg2</gpg.executable>
            <gpg.passphrase>mypassphrase</gpg.passphrase>
          </properties>
        </profile>
      </profiles>
      <activeProfiles>
        <activeProfile>gpg</activeProfile>
      </activeProfiles>
    </settings>

    It can also be included in the key chain on OS X.

Deploy Configuration in Maven settings.xml

Gerrit Subproject Artifacts are stored on Google Cloud Storage. Via the API Console the Gerrit maintainers have access to the Gerrit Code Review project. This projects host several buckets for storing Gerrit artifacts:

  • gerrit-api:

    Bucket to store the Gerrit Extension API Jar and the Gerrit Plugin API Jar.

  • gerrit-maven:

    Bucket to store Gerrit Subproject Artifacts (e.g. gwtjsonrpc etc.).

To upload artifacts to a bucket the user must authenticate with a username and password. The username and password need to be retrieved from the API Console:

  • Go to the Gerrit Code Review project

  • In the menu on the left select Google Cloud Storage > Interoperable Access

  • Use the Access Key as username

  • Click under Secret on the Show button to find the password

To make the username and password known to Maven, they must be configured in the ~/.m2/settings.xml file.

  <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <servers>
      <server>
        <id>gerrit-api-repository</id>
        <username>GOOG..EXAMPLE.....EXAMPLE</username>
        <password>EXAMPLE..EXAMPLE..EXAMPLE</password>
      </server>
      <server>
        <id>gerrit-maven-repository</id>
        <username>GOOG..EXAMPLE.....EXAMPLE</username>
        <password>EXAMPLE..EXAMPLE..EXAMPLE</password>
      </server>
      <server>
        <id>gerrit-plugins-repository</id>
        <username>GOOG..EXAMPLE.....EXAMPLE</username>
        <password>EXAMPLE..EXAMPLE..EXAMPLE</password>
      </server>
    </servers>
  </settings>

Gerrit Subprojects

  • You will need to have the following in the pom.xml to make it deployable to the gerrit-maven storage bucket:

  <distributionManagement>
    <repository>
      <id>gerrit-maven-repository</id>
      <name>Gerrit Maven Repository</name>
      <url>gs://gerrit-maven</url>
      <uniqueVersion>true</uniqueVersion>
    </repository>
  </distributionManagement>
  • Add this to the pom.xml to enable the wagon provider:

  <build>
    <extensions>
      <extension>
        <groupId>com.googlesource.gerrit</groupId>
        <artifactId>gs-maven-wagon</artifactId>
        <version>3.3</version>
      </extension>
    </extensions>
  </build>