I talked about how to upload a kotlin multiplatform library at どこでもKotlin #7 〜Kotlin MPP特集〜.
https://m3-engineer.connpass.com/event/123055/
Bagan, Myanmar@_a_akiraHow to publish a Kotlin Multiplatform Library
View Slide
About me@_a_akira AAkiraCyberAgent, Inc. Akira Aratanihttps://aakira.app"#$%&'()*+,-./012345678⊿
Agenda• MPPライブラリのパッケージ構成• MPPライブラリのGradleの設定• BintrayへのUpload
Agenda• Kotlin/Nativeチュートリアル Android, iOS編 http://aakira.app/blog/2018/10/kotlin-native• Kotlin Multiplatform構想 ~今やる理由編~ https://aakira.app/blog/2018/12/kotlin-mpp-reason• Kotlin Multiplatform構想 ~設計編~ https://aakira.app/blog/2018/12/kotlin-mpp-architecture• Kotlin Multiplatform環境でKotlin Serializationと Android ExtensionsのParcelize Annotationを使う http://aakira.app/blog/2018/12/kotlin-mpp-android-parcelable• NapierというKotlin Multiplatform用のログライブラリを作った https://aakira.app/blog/2019/02/napier
AgendaTimber likeなKotlin mpp用ライブラリhttps://github.com/AAkira/Napier
Agenda
Kotlin Multiplatform Libraryの パッケージ構成Yangon, Myanmar
パッケージ構成 (~Kotlin1.3).├── android│ ├── src│ └── build.gradle (apply plugin: 'kotlin-platform-android')├── common│ ├── src│ │ └── main│ └── build.gradle (apply plugin: 'kotlin-platform-common')├── ios│ ├── src│ │ └── main│ └── build.gradle (apply plugin: 'org.jetbrains.kotlin.platform.native')└─── js├── src│ └── main└── build.gradle (apply plugin: 'kotlin-platform-js')
パッケージ構成 (~Kotlin1.3)各ディレクトリ毎にbuild.gradleがある.├── android│ ├── src│ └── build.gradle (apply plugin: 'kotlin-platform-android')├── common│ ├── src│ │ └── main│ └── build.gradle (apply plugin: 'kotlin-platform-common')├── ios│ ├── src│ │ └── main│ └── build.gradle (apply plugin: 'org.jetbrains.kotlin.platform.native')└─── js├── src│ └── main└── build.gradle (apply plugin: 'kotlin-platform-js')
パッケージ構成 (Kotlin1.3~).└── library├── build.gradle (apply plugin: 'kotlin-multiplatform')└── src├── androidMain├── androidTest├── commonMain├── commonTest├── iosMain├── iosTest├── jsMain├── jsTest├── jvmMain└── jvmTest
パッケージ構成 (Kotlin1.3~).└── library├── build.gradle (apply plugin: 'kotlin-multiplatform')└── src├── androidMain├── androidTest├── commonMain├── commonTest├── iosMain├── iosTest├── jsMain├── jsTest├── jvmMain└── jvmTestbuild.gradleは1つのみ
パッケージ構成何よりも信頼出来るJakeの力強い "yes" @Kotlinlang slack
パッケージ構成 (Kotlin1.3~).└── library├── build.gradle (apply plugin: 'kotlin-multiplatform')└── src├── androidMain├── androidTest├── commonMain├── commonTest├── iosMain├── iosTest├── jsMain├── jsTest├── jvmMain└── jvmTestbuild.gradleは1つのみが正しい
Talat rotfai ratchada, Bangkok, ThailandKotlin Multiplatform Libraryの Gradle設定
Gradle設定• Common• Android• iOS• JVM• JS今回配布するライブラリ.├── library│ ├── android.gradle│ ├── build.gradle│ └── src│ ├── androidMain│ ├── androidTest│ ├── commonMain│ ├── commonTest│ ├── iosMain│ ├── iosTest│ ├── jsMain│ ├── jsTest│ ├── jvmMain│ └── jvmTest└─── build.gradle
Gradle設定• Common• Android• iOS• JVM• JS今回配布するライブラリ.├── library│ ├── android.gradle│ ├── build.gradle│ └── src│ ├── androidMain│ ├── androidTest│ ├── commonMain│ ├── commonTest│ ├── iosMain│ ├── iosTest│ ├── jsMain│ ├── jsTest│ ├── jvmMain│ └── jvmTest└─── build.gradleandroidは 「apply plugin: 'com.android.library'」を読み込む& android用のSDK version等の記述をする 必要があるので分ける
Gradle設定IntelliJ IDEAだとデフォルトで用意されている
Gradle設定apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android()iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }androidMain.dependencies { }androidTest.dependencies { }iosMain.dependencies { }iosTest.dependencies { }iosArm32Main.dependsOn iosMainiosArm32Test.dependsOn iosTestiosArm64Main.dependsOn iosMainiosArm64Test.dependsOn iosTestjsMain.dependencies { }jsTest.dependencies { }jvmMain.dependencies { }jvmTest.dependencies { }}} library/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android()iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }Gradle設定library/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android()iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }Gradle設定android用のgradleは別で定義 (略) 詳しくはサンプルを見てくださいlibrary/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android()iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }Gradle設定publish用のgradleは別定義(後述)library/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android()iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }Gradle設定Kotlin1.3から書き方が変わったlibrary/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {targets {fromPreset(presets.android, 'android')fromPreset(presets.iosArm64, 'ios')fromPreset(presets.js, 'js')fromPreset(presets.jvm, 'jvm')}sourceSets {commonMain.dependencies { }commonTest.dependencies { }androidMain.dependencies { }Gradle設定~Kotlin1.3library/build.gradle
iosArm64('iosArm64')js()jvm()sourceSets {commonMain.dependencies { }commonTest.dependencies { }androidMain.dependencies { }androidTest.dependencies { }iosMain.dependencies { }iosTest.dependencies { }iosArm32Main.dependsOn iosMainiosArm32Test.dependsOn iosTestiosArm64Main.dependsOn iosMainiosArm64Test.dependsOn iosTestjsMain.dependencies { }jsTest.dependencies { }jvmMain.dependencies { }jvmTest.dependencies { }}}Gradle設定それぞれの依存を定義library/build.gradle
apply plugin: 'kotlin-multiplatform'apply from: 'android.gradle'apply from: rootProject.file('gradle/publish.gradle')kotlin {android {publishLibraryVariants("release")}iosX64('ios')iosArm32('iosArm32')iosArm64('iosArm64')js()jvm()sourceSets {Gradle設定library/build.gradleandroid libraryは release buildを指定する必要がある
apply plugin: 'maven-publish'def pomConfig = {licenses {license {name POM_LICENSE_NAMEurl POM_LICENSE_URLdistribution POM_LICENSE_DIST}}developers {developer {id POM_DEVELOPER_IDname POM_DEVELOPER_NAMEorganization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradle
apply plugin: 'maven-publish'def pomConfig = {licenses {license {name POM_LICENSE_NAMEurl POM_LICENSE_URLdistribution POM_LICENSE_DIST}}developers {developer {id POM_DEVELOPER_IDname POM_DEVELOPER_NAMEorganization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}Gradle設定 - Maven Publish -gradle/publish.gradle
apply plugin: 'maven-publish'def pomConfig = {licenses {license {name POM_LICENSE_NAMEurl POM_LICENSE_URLdistribution POM_LICENSE_DIST}}developers {developer {id POM_DEVELOPER_IDname POM_DEVELOPER_NAMEorganization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}Gradle設定 - Maven Publish -gradle/publish.gradlemaven publish pluginをapply
apply plugin: 'maven-publish'def pomConfig = {licenses {license {name POM_LICENSE_NAMEurl POM_LICENSE_URLdistribution POM_LICENSE_DIST}}developers {developer {id POM_DEVELOPER_IDname POM_DEVELOPER_NAMEorganization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}Gradle設定 - Maven Publish -gradle/publish.gradlepomに書き込む用の変数を定義
apply plugin: 'maven-publish'def pomConfig = {licenses {license {name "The Apache Software License, Version 2.0"url "http://www.apache.org/licenses/LICENSE-2.0.txt"distribution "repo"}}developers {developer {id "aakira"name "aakira"organization "aakira"organizationUrl "https://github.com/aakira"}}scm {url "https://github.com/aakira/Napier"}}Gradle設定 - Maven Publish -gradle/publish.gradle実際の中身
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradlepublishで作られる成果物に全てに対して
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradlexmlを作成
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradle先程指定した変数を追加
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradle
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradlemetadataをrename
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradlemetadata=commonMainの部分のこと
organization POM_ORGANIZATION_NAMEorganizationUrl POM_ORGANIZATION_URL}}scm {url SITE_URL}}afterEvaluate {project.publishing.publications.all {pom.withXml {def root = asNode()root.appendNode('name', project.name)root.appendNode('description', POM_DESCRIPTION)root.appendNode('url', SITE_URL)root.children().last() + pomConfig}groupId = BINTRAY_PACKAGEif (it.name.contains('metadata')) {artifactId = "${project.name}"} else {artifactId = "${project.name}-$name"}}}Gradle設定 - Maven Publish -gradle/publish.gradlecommonMainはsuffixなし 他はsuffixに環境名をつけるe.g. napier-android, napier-js
Gradle設定 - Maven Publish -pom-default.xmlThe Apache Software License, Version 2.0http://www.apache.org/licenses/LICENSE-2.0.txtrepoaakiraaakiraaakirahttps://github.com/aakirahttps://github.com/aakira/Napier
Gradle設定 - Maven Publish -• publish• publishAndroidReleasePublicationToMavenLocal• publishIosArm32PublicationToMavenLocal• publishIosArm64PublicationToMavenLocal• publishIosPublicationToMavenLocal• publishJsPublicationToMavenLocal• publishJvmPublicationToMavenLocal• publishKotlinMultiplatformPublicationToMavenLocal• publishMetadataPublicationToMavenLocal• publishToMavenLocaltargetの数だけmaven publishに関するtaskが作られる
Gradle設定 - Maven Publish -$ ./gradlew publishToMavenLocalbuild└── publications├── androidRelease│ ├── module.json│ └── pom-default.xml├── ios│ ├── module.json│ └── pom-default.xml├── iosArm32│ ├── module.json│ └── pom-default.xml├── iosArm64│ ├── module.json│ └── pom-default.xml├── js│ ├── module.json│ └── pom-default.xml├── jvm│ ├── module.json│ └── pom-default.xml├── kotlinMultiplatform│ ├── module.json│ └── pom-default.xml└── metadata├── module.json└── pom-default.xml
build└── publications├── androidRelease│ ├── module.json│ └── pom-default.xml├── ios│ ├── module.json│ └── pom-default.xml├── iosArm32│ ├── module.json│ └── pom-default.xml├── iosArm64│ ├── module.json│ └── pom-default.xml├── jsGradle設定 - Maven Publish -oMavenLocal
├── iosArm32│ ├── module.json│ └── pom-default.xml├── iosArm64│ ├── module.json│ └── pom-default.xml├── js│ ├── module.json│ └── pom-default.xml├── jvm│ ├── module.json│ └── pom-default.xml├── kotlinMultiplatform│ ├── module.json│ └── pom-default.xml└── metadata├── module.json└── pom-default.xmlGradle設定 - Maven Publish -oMavenLocal
Gradle設定 - Gradle Publish -/build.gradlebuildscript {repositories {...}dependencies {...classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"...}}https://github.com/bintray/gradle-bintray-plugin
apply plugin: 'com.jfrog.bintray'def getBintrayUserProperty() {return hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')}def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLversion {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}bintrayUpload.doFirst {publications = publishing.publications.collect {it.name}.findAll {it != "kotlinMultiplatform"}}bintrayUpload.dependsOn publishToMavenLocalGradle設定 - Gradle Publish -gradle/publish.gradle
apply plugin: 'com.jfrog.bintray'def getBintrayUserProperty() {return hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')}def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLGradle設定 - Gradle Publish -gradle/publish.gradle
apply plugin: 'com.jfrog.bintray'def getBintrayUserProperty() {return hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')}def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLGradle設定 - Gradle Publish -gradle/publish.gradlebintrayのpluginをapply
apply plugin: 'com.jfrog.bintray'def getBintrayUserProperty() {return hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER')}def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLGradle設定 - Gradle Publish -gradle/publish.gradlebintrayのuser名, API Keyを読み込むgitに追加されないlocalの ~/.gradle/gradle.propertiesに書いておくと良い
def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') :System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLversion {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}Gradle設定 - Gradle Publish -gradle/publish.gradle
def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') :System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLversion {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}Gradle設定 - Gradle Publish -gradle/publish.gradlekeyをセット
def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') :System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = BINTRAY_REPOSITORYname = BINTRAY_NAMEuserOrg = GROUPlicenses = ['Apache-2.0']vcsUrl = VCS_URLwebsiteUrl = SITE_URLissueTrackerUrl = ISSUE_URLversion {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}Gradle設定 - Gradle Publish -gradle/publish.gradleupload後すぐに公開しない
def getBintrayApiKeyProperty() {return hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') :System.getenv('BINTRAY_API_KEY')}bintray {user = getBintrayUserProperty()key = getBintrayApiKeyProperty()publish = falsepkg {repo = 'maven'name = 'napier'userOrg = 'aakira'licenses = ['Apache-2.0']vcsUrl = 'https://github.com/aakira/Napier.git'websiteUrl = 'https://github.com/aakira/Napier'issueTrackerUrl = 'https://github.com/aakira/Napier/issues'version {name = '0.0.1'vcsTag = '0.0.1'released = new Date()}}}Gradle設定 - Gradle Publish -gradle/publish.gradle
version {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}bintrayUpload.doFirst {publications = publishing.publications.collect {it.name}.findAll {it != "kotlinMultiplatform"}}bintrayUpload.dependsOn publishToMavenLocalGradle設定 - Gradle Publish -gradle/publish.gradlebintrayにuploadするpublicationsを指定
version {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}bintrayUpload.doFirst {publications = publishing.publications.collect {it.name}.findAll {it != "kotlinMultiplatform"}}bintrayUpload.dependsOn publishToMavenLocalGradle設定 - Gradle Publish -gradle/publish.gradle[project name]-kotlinMultiplatform というディレクトリがアップロードされてしまうので除外
version {name = rootProject.ext.LIBRARY_VERSION_NAMEvcsTag = rootProject.ext.LIBRARY_VERSION_NAMEreleased = new Date()}}}bintrayUpload.doFirst {publications = publishing.publications.collect {it.name}.findAll {it != "kotlinMultiplatform"}}bintrayUpload.dependsOn publishToMavenLocalGradle設定 - Gradle Publish -gradle/publish.gradlebintrayUpload taskにpublishToMavenLocalを依存させる
Wat Arun, Bangkok, ThailandBintrayへのUpload
BintrayへのUpload
BintrayへのUpload今回はMavenを選択 publish.gradleのBINTRAY_REPOSITORYと一致
BintrayへのUploadUI変わった
BintrayへのUploadBINTRAY_NAMEISSUE_URLVCS_URLSITE_URL
BintrayへのUpload$ ./gradlew clean$ ./gradlew bintrayUpload
BintrayへのUploadPublish allを選択すると公開される
BintrayへのUpload/build.gradlebuildscript {repositories {...maven { url "http://dl.bintray.com/[bintray repository]/[bintray name]" }...}}
BintrayへのUpload/build.gradlebuildscript {repositories {...maven { url "http://dl.bintray.com/[bintray repository]/[bintray name]" }...}}ライブラリ毎にmavenのrepositoryを書かないといけない
BintrayへのUpload右上のActionから選択
BintrayへのUploadそれっぽい説明をちゃんと書く
BintrayへのUpload/build.gradlebuildscript {repositories {jcenter()}}
Wat Paknam, Bangkok, ThailandSummary
Summary• Kotlin1.3からはgradleを1つにした構成にしましょう• metadataの成果物はcommonのこと• androidの配布はreleaseを明示的に書く必要あり• ライブラリをローカルで参照する方法はサンプルを(時間の都合)• Napierのpublish.gradleコピペすればすぐ上げられる (先人の犠牲を無駄にするな...)
Have a nice Kotlin@_a_akiraBagan, Myanmar