Gradleのmaven-publishプラグインは、生成されたjarファイル類を公開する。
|
|
maven-publishプラグインは、生成されたjarファイル類をMavenリポジトリーに公開する。
plugins { id "maven-publish" id "signing" } 〜 publishing { 〜 }
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>