GradleからBintrayにuploadして公開する(Kotlin DSL編)

|  | |
|---|---|
|version  |2020, July  |
|Java| Java8 or Later|
|Gradle  |6.5.x |
|Kotlin  |1.3.x |

久々にJVM言語で作ったライブラリをBintrayで公開してみたのでその時の流れをまとめておきます。
思ったよりこの辺のドキュメントってないものですね.[^1]

[^1]: Bintray+jcenterってあんまり皆さん使ってない?


# 諸注意

この例では主にGradleの v5から使えるようになったKotlin DSLでの書き方を採用しています。
Groovy版での書き方ももしリクエストがあれば、今後追記するかもしれません。

詳しい説明は [こちら](https://docs.gradle.org/current/userguide/kotlin_dsl.html) を参照ください。

## maven-publishを使う

Gradleの場合、 [gradle-bintray-plugin](https://github.com/bintray/gradle-bintray-plugin)があるのですが、残念ながら現在の最新版では Gradle v6ではエラーがでてアップロードできない状態です。
https://github.com/bintray/gradle-bintray-plugin/issues/307

そのため、 [maven-publish](https://docs.gradle.org/current/userguide/publishing_maven.html) plugin を使います。

```kotlin
plugins {
    `maven-publish`
}
```

## bintrayのアカウントをつくる

実際に公開するときに参考にした以下の記事を参考にすることをおすすめします。

* [jCenterでライブラリを公開する方法](https://qiita.com/ryo_mm2d/items/da49cc4677847c20c3fb)
* [jCenter (bintray) にアップロードするbuild.gradle](https://qiita.com/ryo_mm2d/items/5ffc52c4554ebeef45de)

英語で問題なければ公式をよむことをおすすめします
https://www.jfrog.com/confluence/display/BT/Uploads#_how_to_upload

## bintrayの設定をおく

公開しているディレクトリ内(./gradle.properties) or ユーザーフォルダ(`~/.gradle/gradle.properties`)
で設定する必要があります。 


```gradle.properties
// emailではなく、ユーザー名を書く
bintray_user=xxxx
// https://bintray.com/profile/edit からAPI keyを作成する
bintray_api_key=xxxx
```

## 設定

```build.gradle.kts

publishing {
    publications {
        create<MavenPublication>("maven") {
            groupId = "com.github.masahitojp"
            // 公開するライブラリがJavaの場合は "java" と書くと良い
            from(components.findByName("kotlin"))

            // 個々から下は公開するライブラリごとの設定を入れる。例として私のライブラリの設定をいれています。
            pom {
                name.set("bqdatamapper4k")
                description.set("BigQuery datamapper in Kotlin")
                url.set("https://github.com/masahitojp/bqdatamapper4k")
                licenses {
                    license {
                        name.set("Apache License, Version 2.0")
                        url.set("https://opensource.org/licenses/Apache-2.0")
                    }
                }
                developers {
                    developer {
                        id.set("masahitojp")
                        name.set("Masato Nakamura")
                        email.set("randomstep@gmail.com")
                    }
                }
                scm {
                    connection.set("scm:git:git@github.com:masahitojp/bqdatamapper4k.git")
                    developerConnection.set("scm:git:ssh://github.com:masahitojp/bqdatamapper4k.git")
                    url.set("https://github.com/masahitojp/bqdatamapper4k")
                }
            }
        }
    }
    repositories {
        maven {
            name = "bintray"
            val bintrayUsername = "masahitojp"
            val bintrayRepoName = "maven"
            val bintrayPackageName = "com.github.masahitojp.bqdatamapper4k"
            setUrl("https://api.bintray.com/content/$bintrayUsername/$bintrayRepoName/$bintrayPackageName/${project.version};publish=0;override=1")
　　　　　　　// bintrayの認証情報をいれる
            // gradle.propertiesの設定とkey名があっているか確認すること
            credentials {
                username = project.findProperty("bintray_user") as String?
                password = project.findProperty("bintray_api_key") as String?
            }
        }
    }
}
```

## 例

このあたりにフルの例を追加しておきました。参考にしていただけると幸いです。
https://github.com/masahitojp/bqdatamapper4k/blob/master/settings.gradle.kts


## 参考

* [jCenterでライブラリを公開する方法](https://qiita.com/ryo_mm2d/items/da49cc4677847c20c3fb)
* [jCenter (bintray) にアップロードするbuild.gradle](https://qiita.com/ryo_mm2d/items/5ffc52c4554ebeef45de)
* https://www.jfrog.com/confluence/display/BT/Uploads#_how_to_upload
* https://github.com/rocketraman/kpropmap <- kotlin dslでの書き方はほぼほぼ個々の書き方を踏襲しました。