@int128

int128.hatenablog.com

GradleからNexusに成果物を公開する

TL;DR

  • Gradle 4, Nexus 3を前提とする。
  • Gradleに標準で含まれる maven-publish プラグインを利用してNexusに成果物を公開できる。追加のプラグインは必要ない。
  • Gradleの repositories ブロックでNexusリポジトリURLを指定する。成果物の公開、取得ともに同じ書き方でよい。

成果物の公開

Nexusに成果物を公開するには、Gradleに標準で含まれる maven-publish プラグインを利用する。ビルドスクリプトは以下のようになる。

plugins {
  id 'java'
  id 'maven-publish'
}

version = '1.0.0'
group = 'com.example'

publishing {
  repositories {
    maven {
      url 'https://nexus.example.com/repository/maven-releases/'
      credentials {
        username = System.getenv('NEXUS_USERNAME')  // CIで環境変数を設定する
        password = System.getenv('NEXUS_PASSWORD')  // CIで環境変数を設定する
      }
    }
  }
}

成果物の公開をCIで行う場合、Nexusの認証情報はCIからGradleに環境変数で渡すとよい。Jenkinsfileの場合は以下のように書くと認証情報を環境変数に設定できる。

withCredentials([usernamePassword(credentialsId: '7117638a-d26b-4350-b28c-e360c327cca5', passwordVariable: 'NEXUS_PASSWORD', usernameVariable: 'NEXUS_USERNAME')]) {
  sh './gradlew publish'
}

CircleCIやTravis CIの場合はビルドの設定画面から環境変数を設定すればよい。

成果物の取得

Nexusで公開されている成果物を利用するには先ほどと同様に repositories ブロックを記述すればよい。

repositories {
  maven {
    url 'https://nexus.example.com/repository/maven-releases/'
  }
  mavenCentral()
}

dependencies {
  //...
}

Nexusの認証情報が必要な場合は先ほどと同様に credentials ブロックで設定できる。