Gradleのmaven-publishプラグインは、生成されたjarファイル類を公開する。
|
|
maven-publishプラグインは、生成されたjarファイル類をMavenリポジトリーに公開する。
plugins {
id "maven-publish"
id "signing"
}
〜
publishing {
〜
}
※下記の方法でのMavenセントラルリポジトリーへのpublishは、2025年6月で廃止になった。→com.vanniktech.maven.publishプラグイン [2025-07-03]
maven-publishプラグインで公開の為の情報を設定する。
以下、Mavenセントラルリポジトリーにpublishする為の設定の例。
Mavenセントラルリポジトリーにjarファイルをアップロードする際は、sources.jarとjavadoc.jarも必要らしい。
javaブロックにwithSouresJar()とwithJavadocJar()を指定することで、sources.jarとjavadoc.jarが生成される。
plugins {
id "java"
id "maven-publish"
id "signing"
}
group = 'io.github.hishidama.embulk'
version = '0.1.0'
sourceCompatibility = 8
targetCompatibility = 8
compileJava.options.encoding = 'UTF-8'
java {
withJavadocJar()
withSourcesJar()
}
javadoc {
options.charSet = 'UTF-8'
options.encoding = 'UTF-8'
}
〜
publishing {
publications {
mavenJava(MavenPublication) {
artifactId = 'hm-embulk-tester'
from components.java
pom {
name = 'hm-embulk-tester'
description = 'Tool to test Embulk plugin'
url = 'https://github.com/hishidama/hm-embulk-tester'
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = 'hishidama'
}
}
scm {
connection = 'git@github.com:hishidama/hm-embulk-tester.git'
developerConnection = 'git@github.com:hishidama/hm-embulk-tester.git'
url = 'https://github.com/hishidama/hm-embulk-tester'
}
}
}
}
repositories {
maven {
url = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = findProperty('sonatypeUsername')
password = findProperty('sonatypePassword')
}
}
}
}
signing {
required { gradle.taskGraph.hasTask("publishMavenJavaPublicationToMavenRepository") }
sign publishing.publications.mavenJava
}
repositoriesブロックに、publish先である「Mavenセントラルリポジトリーのステージング環境」のURLと認証情報(Sonatypeのアカウント)を指定する。
ユーザー名やパスワードはbuild.gradleに直接書くとGitHub等にpushしたときに公開されてしまうので、公開しないgradle.propertiesに書いておき、それを参照するようにする。
build.gradle上の書き方として、
「"${sonatypeUsername}"」だとsonatypeUsernameプロパティーが存在していないとエラーになるので(単なるビルドすらエラーになる)、findProperty()の方が良さそう。[2023-10-01]
また、Mavenセントラルリポジトリーでソフトウェアを公開する際は、電子署名が必要となる。
電子署名にはsigningプラグインを使用する。(publishを実行すると、拡張子ascのファイルが作られる)
./gradlew publish
Mavenセントラルリポジトリー以外のMavenリポジトリーを使う場合、build.gradleのrepositoriesにそのリポジトリーを指定する。[2023-10-01]
repositories {
mavenCentral()
maven { url 'https://asakusafw.s3.amazonaws.com/maven/releases' }
}
ビルド自体はこれで問題ないが、mvnコマンドで依存ライブラリーをダウンロードする際はMavenセントラルリポジトリーからしかダウンロードされない為、Mavenセントラルリポジトリー以外のライブラリーを含んだpomファイルだとエラーになる。
mvnコマンドの引数ではMavenリポジトリーを指定できないようだが、pomファイル内にはrepositoriesを記述することが出来る。
ただし、Gradleのpublishingのpomブロックにはrepositoriesが用意されていないので、withXmlを使って記述する。
publications {
mavenJava(MavenPublication) {
〜
pom {
〜
withXml {
def repositoriesNode = asNode().appendNode('repositories')
def repositoryNode = repositoriesNode.appendNode('repository')
repositoryNode.appendNode('id', 'asakusafw')
repositoryNode.appendNode('url', 'https://asakusafw.s3.amazonaws.com/maven/releases')
}
}
}
}
↓生成されたbuild/publications/mavenJava/pom-default.xmlの末尾
<repositories>
<repository>
<id>asakusafw</id>
<url>https://asakusafw.s3.amazonaws.com/maven/releases</url>
</repository>
</repositories>
</project>