рдЕрдкрдиреЗ рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрдЯрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рддрдд рд╡рд┐рддрд░рдг

рд▓реЛрдЧреЛ


рдирдорд╕реНрддреЗ! рдореЗрд░рд╛ рдирд╛рдо рдпреВрд░реА рд╡реНрд▓рд╛рдж рд╣реИ, рдореИрдВ Badoo рдкрд░ рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░ рд╢реБрджреНрдз рдХреЛрдЯрд▓рд┐рди рдкрд░ рд░реЗрдХрд┐рдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА - рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ ред


рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЗрдВ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпреНрдЯреНрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред


рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг


рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд╕рдореБрджрд╛рдп рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд░рд╣рд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ: рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рдЬреАрдЯрдкреИрдХ, рд╕рд░реНрдХрд┐рд▓рд╕реАрдЖрдИ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдПрдЬрд╝реНрдпреЛрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдЧрд┐рдЯрд╣рдм рдПрдХреНрд╢рдиред


Android рдХреЗ рд▓рд┐рдП Badoo рдХреЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ, рд╣рдо рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрд╡рд┐рд╕ CI рдФрд░ рдирд┐рд░рдВрддрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдП JitPack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдмрд╣реБ-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ iOS рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдо JitPack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ macOS рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (iOS рдХреЗрд╡рд▓ macOS рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред


рдЗрд╕рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЖрдЧреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП, рдмрд┐рдВрдЯреНрд░реЗ , рдЬреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдереЗ, рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ JitPack рдХреЗ рд╡рд┐рдкрд░реАрдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рдорд╣реАрди рдЯреНрдпреВрдирд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ publishToMavenLocal рдХреЙрд▓ рдХреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ publishToMavenLocal ред


рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП, рдЧреНрд░реИрдбрд▓ рдмрд┐рдВрдЯреНрд░реЗ рдкреНрд▓рдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдерд╛ рдФрд░ рд▓рдЧрднрдЧ рд╕рднреА рдкрд╛рд▓рддреВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рдерд╛; рджреВрд╕рд░реЗ, рдпрд╣ iOS рдкрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ macOS рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдПрдХ рдмрд╣реБ рдордВрдЪ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛


рдпрджрд┐ рдЖрдк рдХреЛрдЯрд▓рд┐рди рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдмрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБ-рдордВрдЪ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдкрд░ рдПрдХ рдЕрдиреБрднрд╛рдЧ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдпрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЕрд╕реЗрдВрдмрд▓реА рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ (рд╣рд░ рдЪреАрдЬ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд╣реАрдВ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ) рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВред


 kotlin { jvm() js() mingwX64() linuxX64() // Note that the Kotlin metadata is here, too. // The mingwx64() target is automatically skipped as incompatible in Linux builds. configure([targets["metadata"], jvm(), js()]) { mavenPublication { targetPublication -> tasks.withType(AbstractPublishToMaven) .matching { it.publication == targetPublication } .all { onlyIf { findProperty("isLinux") == "true" } } } } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, isLinux рдкрд╛рд░рд┐рдд isLinux рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдХреБрдЫ рд▓рдХреНрд╖реНрдпреЛрдВ isLinux рдкреНрд░рдХрд╛рд╢рди рдХреЛ isLinux рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреЗ рддрд╣рдд рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдорддрд▓рдм рдХрд░реВрдВрдЧрд╛ред рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рд▓рдХреНрд╖реНрдп рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдЕрдиреНрдп рд▓рдХреНрд╖реНрдп рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред


рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдорд╛рдзрд╛рди рдЬреЛ рдХреЗрд╡рд▓ publishToMavenLocal рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ publishToMavenLocal maven-publish рдкреНрд▓рдЧрдЗрди maven-publish рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЧреНрд░реИрдбрд▓ рдмрд┐рдВрдЯреНрд░реЗ рдкреНрд▓рдЧрд┐рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред


рдореИрдВрдиреЗ рд▓рдХреНрд╖реНрдп рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдкрд╣рд▓реЗ рдЧреНрд░реВрд╡реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЕрд▓рдЧ рдЧреНрд░реВрд╡реА рдЧреНрд░реИрдб рд▓рд┐рдкрд┐ рдореЗрдВ рд░рдЦрдирд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрджрд░реНрдн рд╕реЗ рд╣реИред


 enum class Target { ALL, COMMON, IOS, META; val common: Boolean @JvmName("isCommon") get() = this == ALL || this == COMMON val ios: Boolean @JvmName("isIos") get() = this == ALL || this == IOS val meta: Boolean @JvmName("isMeta") get() = this == ALL || this == META companion object { @JvmStatic fun currentTarget(): Target { val value = System.getProperty("MP_TARGET") return values().find { it.name.equals(value, ignoreCase = true) } ?: ALL } } } 

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдЪрд╛рд░ рд╕рдореВрд╣реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА:


  1. рд╕рднреА - рд╕рднреА рд▓рдХреНрд╖реНрдп рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  2. COMMON - рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕-рд╕рдВрдЧрдд рд▓рдХреНрд╖реНрдп рдЬреБрдбрд╝реЗ рдФрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, JVM, Android JVM, Linux x64 рдФрд░ Linux ARM x32 рд╣реИрдВред
  3. IOS - рдХреЗрд╡рд▓ iOS рд▓рдХреНрд╖реНрдп рдЬреБрдбрд╝реЗ рдФрд░ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ macOS рдкрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдореЗрдЯрд╛ - рд╕рднреА рд▓рдХреНрд╖реНрдп рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЧреНрд░реЗрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓рдХреНрд╖реНрдп рд╕рдореВрд╣реЛрдВ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ (COMMON - Linux, IOS - macOS, META - Linux) рдореЗрдВ рд╕рдорд╛рдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдк рд╕рдм рдХреБрдЫ macOS рдкрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рджреЛ рдлрд╛рдпрджреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдЧрд░ рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдПрдХ рдирдпрд╛ рд▓рдХреНрд╖реНрдп рд╕рдореВрд╣ рдФрд░ рдПрдХ рдирдИ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рджреВрд╕рд░реЗ, рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк рд▓рд┐рдирдХреНрд╕ рдкрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрдиреЛрдВ рдкрд░ рд╕реАрдкреАрдпреВ рдХрд╛ рд╕рдордп рдЖрдорддреМрд░ рдкрд░ рджреЛрдЧреБрдирд╛ рдорд╣рдВрдЧрд╛ рд╣реЛрддрд╛ рд╣реИред


рдЧреНрд░реЗрдбреЗрдб рдореЗрдЯрд╛рдбреЗрдЯрд╛


рдЧреНрд░реЗрдбреЗрдб рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ?


рдорд╛рд╡реЗрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдУрдПрдо (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


 <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.jakewharton.rxbinding2</groupId> <artifactId>rxbinding-leanback-v17-kotlin</artifactId> <version>2.2.0</version> <packaging>aar</packaging> <name>RxBinding Kotlin (leanback-v17)</name> <description>RxJava binding APIs for Android's UI widgets.</description> <url>https://github.com/JakeWharton/RxBinding/</url> <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> </licenses> <developers> <developer> <id>jakewharton</id> <name>Jake Wharton</name> </developer> </developers> <scm> <connection>scm:git:git://github.com/JakeWharton/RxBinding.git</connection> <developerConnection>scm:git:ssh://git@github.com/JakeWharton/RxBinding.git</developerConnection> <url>https://github.com/JakeWharton/RxBinding/</url> </scm> <dependencies> <dependency> <groupId>com.android.support</groupId> <artifactId>support-annotations</artifactId> <version>28.0.0</version> <scope>compile</scope> </dependency> </dependencies> </project> 

POM рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг, рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ JDK рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, kotlin-stdlib рдХреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ: kotlin-stdlib-jdk8 рдФрд░ kotlin-stdlib-jdk7 ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


JDK рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╕рдордп, рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рдЧреНрд░реИрдбрд▓ рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рд╕рдорд░реНрдерд┐рдд org.gradle.jvm.version рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ org.gradle.jvm.version , рдЬреЛ JDK рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, kotlin-stdlib рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:


 { "formatVersion": "1.0", "component": { "group": "org.jetbrains.kotlin", "module": "kotlin-stdlib", "version": "1.3.0" }, "variants": [ { "name": "apiElements", "attributes": { "org.gradle.jvm.version": 8 }, "available-at": { "url": "../../kotlin-stdlib-jdk8/1.3.0/kotlin-stdlib-jdk8.module", "group": "org.jetbrains.kotlin", "module": "kotlin-stdlib-jdk8", "version": "1.3.0" } }, { "name": "apiElements", "attributes": { "org.gradle.jvm.version": 7 }, "available-at": { "url": "../../kotlin-stdlib-jdk7/1.3.0/kotlin-stdlib-jdk7.module", "group": "org.jetbrains.kotlin", "module": "kotlin-stdlib-jdk7", "version": "1.3.0" } } ] } 

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, reaktive-1.0.0-rc1.module рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 { "formatVersion": "1.0", "component": { "group": "com.badoo.reaktive", "module": "reaktive", "version": "1.0.0-rc1", "attributes": { "org.gradle.status": "release" } }, "createdBy": { "gradle": { "version": "5.4.1", "buildId": "tv44qntk2zhitm23bbnqdngjam" } }, "variants": [ { "name": "android-releaseRuntimeElements", "attributes": { "com.android.build.api.attributes.BuildTypeAttr": "release", "com.android.build.api.attributes.VariantAttr": "release", "com.android.build.gradle.internal.dependency.AndroidTypeAttr": "Aar", "org.gradle.usage": "java-runtime", "org.jetbrains.kotlin.platform.type": "androidJvm" }, "available-at": { "url": "../../reaktive-android/1.0.0-rc1/reaktive-android-1.0.0-rc1.module", "group": "com.badoo.reaktive", "module": "reaktive-android", "version": "1.0.0-rc1" } }, { "name": "ios64-api", "attributes": { "org.gradle.usage": "kotlin-api", "org.jetbrains.kotlin.native.target": "ios_arm64", "org.jetbrains.kotlin.platform.type": "native" }, "available-at": { "url": "../../reaktive-ios64/1.0.0-rc1/reaktive-ios64-1.0.0-rc1.module", "group": "com.badoo.reaktive", "module": "reaktive-ios64", "version": "1.0.0-rc1" } }, { "name": "linuxX64-api", "attributes": { "org.gradle.usage": "kotlin-api", "org.jetbrains.kotlin.native.target": "linux_x64", "org.jetbrains.kotlin.platform.type": "native" }, "available-at": { "url": "../../reaktive-linuxx64/1.0.0-rc1/reaktive-linuxx64-1.0.0-rc1.module", "group": "com.badoo.reaktive", "module": "reaktive-linuxx64", "version": "1.0.0-rc1" } }, ] } 

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ org.jetbrains.kotlin рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж org.jetbrains.kotlin рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕реНрд░реЛрдд рд╕реЗрдЯ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред


рдЖрдк рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 enableFeaturePreview("GRADLE_METADATA") 

рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ


рд╣рдордиреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред


рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреНрд░реИрдбрд▓ рдмрд┐рдВрдЯреНрд░реЗ рдкреНрд▓рдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ README рдХреА рдУрд░ рдореБрдбрд╝реЗрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗрдЯ рдХрд░реЗрдВред


рд╣рдо buildSrc рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдкреВрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗред
buildSrc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдИ рдлрд╛рдпрджреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг (рдХреЛрдЯрд▓рд┐рди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ), рдЗрд╕рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░реВрд╡реА рдФрд░ рдХреЛрдЯрд▓реАрди рд▓рд┐рдкрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред рдЖрдк рдирд╡реАрдирддрдо Google I / O (рдЧреНрд░реИрдЧрд▓ рдЕрдиреБрднрд╛рдЧ) рд╕реЗ buildSrc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


 private fun setupBintrayPublishingInformation(target: Project) { //  Bintray Plugin   target.plugins.apply(BintrayPlugin::class) //    target.extensions.getByType(BintrayExtension::class).apply { user = target.findProperty("bintray_user")?.toString() key = target.findProperty("bintray_key")?.toString() pkg.apply { repo = "maven" name = "reaktive" userOrg = "badoo" vcsUrl = "https://github.com/badoo/Reaktive.git" setLicenses("Apache-2.0") version.name = target.property("reaktive_version")?.toString() } } } 

рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рддреАрди рдЧрддрд┐рд╢реАрд▓ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: bintray_user рдФрд░ bintray_key , рдЬрд┐рд╕реЗ Bintray рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ reaktive_version , рдЬреЛ рд░реВрдЯ build.gradle рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рд╣реИред


рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП, рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдХ рдкреНрд▓рдЧрд┐рди рдПрдХ MavenPublication рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ PublishingExtension рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред


рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдЯрд▓рд┐рди рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 private fun createConfigurationMap(): Map<String, Boolean> { val mppTarget = Target.currentTarget() return mapOf( "kotlinMultiplatform" to mppTarget.meta, KotlinMultiplatformPlugin.METADATA_TARGET_NAME to mppTarget.meta, "jvm" to mppTarget.common, "js" to mppTarget.common, "androidDebug" to mppTarget.common, "androidRelease" to mppTarget.common, "linuxX64" to mppTarget.common, "linuxArm32Hfp" to mppTarget.common, "iosArm32" to mppTarget.ios, "iosArm64" to mppTarget.ios, "iosX64" to mppTarget.ios ) } 

рдЗрд╕ рд╕рд░рд▓ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рд╣рдо рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдХреМрди рд╕реЗ рдкреНрд░рдХрд╛рд╢рди рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдирд╛рдо рд▓рдХреНрд╖реНрдп рдХрд╛ рдирд╛рдо рд╣реИред рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рдХреНрд╖рд┐рдд рд╕рдореВрд╣реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рдерд╛ред


Bintray рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВред Bintray рдкреНрд▓рдЧрдЗрди рдПрдХ BintrayUploadTask рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗред


 private fun setupBintrayPublishing( target: Project, taskConfigurationMap: Map<String, Boolean> ) { target.tasks.named(BintrayUploadTask.getTASK_NAME(), BintrayUploadTask::class) { doFirst { //   } } } 

рд╣рд░ рдХреЛрдИ рдЬреЛ рдмрд┐рдВрдЯреНрд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХреА рдЧрдИ рд╣реИ (рдЖрдЦрд┐рд░реА рдЕрдкрдбреЗрдЯ рд▓рдЧрднрдЧ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ), рдФрд░ рдпрд╣ рдХрд┐ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдХреНрд╕ рдФрд░ рдЗрд╢реНрдпреВ рдЯреИрдм рдореЗрдВ рдмреИрд╕рд╛рдЦреА рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреНрд░реЗрдбрд▓ рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдЬреИрд╕реА рдирдИ рддрдХрдиреАрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реА рдореБрджреНрджреЗ рдореЗрдВ рдЖрдк рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


 val publishing = project.extensions.getByType(PublishingExtension::class) publishing.publications .filterIsInstance<MavenPublication>() .forEach { publication -> val moduleFile = project.buildDir.resolve("publications/${publication.name}/module.json") if (moduleFile.exists()) { publication.artifact(object : FileBasedMavenArtifact(moduleFile) { override fun getDefaultExtension() = "module" }) } } 

рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо module.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, module.json рдХрд╛рд░рдг module.json рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдпрд╣реАрдВ рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЬрдм рдЖрдк bintrayPublish рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ bintrayPublish рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛ рдФрд░ рдХреЛрдЯрд▓рд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд┐рдВрдЯреНрд░реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓рд╛рдЯ рд░рд┐рдХреЙрд░реНрдбрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢рди рдЦреАрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреНрд▓рдЧрдЗрди рдмрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╣рд╛рдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рднреА рд╣реИред рдФрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдХреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 val publications = publishing.publications .filterIsInstance<MavenPublication>() .filter { val res = taskConfigurationMap[it.name] == true logger.warn("Artifact '${it.groupId}:${it.artifactId}:${it.version}' from publication '${it.name}' should be published: $res") res } .map { logger.warn("Uploading artifact '${it.groupId}:${it.artifactId}:${it.version}' from publication '${it.name}'") it.name } .toTypedArray() setPublications(*publications) 

рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!


рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ bintrayUpload рдкрд╛рд╕ рдЖрд╢реНрд░рд┐рддреЛрдВ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди publishToMavenLocal рдХреЛ publishToMavenLocal рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред


рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдХрддреНрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ publishToMavenLocal , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ publishToMavenLocal рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ publishToMavenLocalAndroidDebug , publishToMavenLocalAndroiRelase , publishToMavenLocalJvm рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред


рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдХреЗрд╡рд▓ рдЙрди publishToMavenLocalX рдХреЛ publishToMavenLocalX рд╣реИрдВ publishToMavenLocalX рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ bintrayPublish рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реНрд╡рдпрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗред


 private fun setupLocalPublishing( target: Project, taskConfigurationMap: Map<String, Boolean> ) { target.project.tasks.withType(AbstractPublishToMaven::class).configureEach { val configuration = publication?.name ?: run { // Android-       PublishToMaven,        val configuration = taskConfigurationMap.keys.find { name.contains(it, ignoreCase = true) } logger.warn("Found $configuration for $name") configuration } //          enabled = taskConfigurationMap[configuration] == true } } private fun createFilteredPublishToMavenLocalTask(target: Project) { //  -         publishToMavenLocal target.tasks.register(TASK_FILTERED_PUBLISH_TO_MAVEN_LOCAL) { dependsOn(project.tasks.matching { it is AbstractPublishToMaven && it.enabled }) } } 

рдпрд╣ рдХреЗрд╡рд▓ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


 abstract class PublishPlugin : Plugin<Project> { override fun apply(target: Project) { val taskConfigurationMap = createConfigurationMap() createFilteredPublishToMavenLocalTask(target) setupLocalPublishing(target, taskConfigurationMap) setupBintrayPublishingInformation(target) setupBintrayPublishing(target, taskConfigurationMap) } 

 apply plugin: PublishPlugin 

рдкреВрд░рд╛ PublishPlugin рдХреЛрдб рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЯреНрд░реИрд╡рд┐рд╕ CI рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрдирд╛рдП рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдмрд┐рдВрдЯреНрд░реЗ рдХреЛ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХреЗред


рд╣рдо рдХрдорд┐рдЯ рдкрд░ рдПрдХ рдЯреИрдЧ рдмрдирд╛рдХрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗред


 #    ( ) matrix: include: #  Linux  Android  Chrome    JS, JVM, Android JVM  Linux - os: linux dist: trusty addons: chrome: stable language: android android: components: - build-tools-28.0.3 - android-28 #  MP_TARGET,        env: MP_TARGET=COMMON #     install тАФ Gradle     install: true #    JVM       RxJava2 script: ./gradlew reaktive:check reaktive-test:check rxjava2-interop:check -DMP_TARGET=$MP_TARGET #  macOS   iOS- - os: osx osx_image: xcode10.2 language: java env: MP_TARGET=IOS install: true script: ./gradlew reaktive:check reaktive-test:check -DMP_TARGET=$MP_TARGET #  Linux    - os: linux language: android android: components: - build-tools-28.0.3 - android-28 env: MP_TARGET=META #     -  install: true script: true #    Gradle (           ) before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ cache: directories: - $HOME/.gradle/caches/ - $HOME/.gradle/wrapper/ #  ,   Kotlin/Native    - $HOME/.konan/ #     Bintray    ,           deploy: skip_cleanup: true provider: script script: ./gradlew bintrayUpload -DMP_TARGET=$MP_TARGET -Pbintray_user=$BINTRAY_USER -Pbintray_key=$BINTRAY_KEY on: tags: true 

рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдЕрд╕реЗрдВрдмрд▓реА рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдИ, рддреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдЕрдиреНрдп рд▓рдХреНрд╖реНрдп рдЕрднреА рднреА рдмрд┐рдВрдЯреНрд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЙрдирдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рдВрдЯреНрд░реЗ рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред


рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдЯрд▓рд┐рди рдорд▓реНрдЯреАрдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред


рдХреЛрдбрд╛рдВрддрд░рдг, рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдФрд░ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдореБрдлреНрдд рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдФрд░ рдпрджрд┐ рдЖрдк рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рдЖрд░реНрдХрдЯрд┐рд╡ рдЗрд╡рд╛рдиреЛрд╡ рдЕрд░реНрдХрд┐рд╡рд╛рдиреЛрд╡ , рд░реЗрдХрдЯрд┐рд╡ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓реЗрдЦрдХ), рддреЛ рдЖрдкрдХреЛ рдЕрдм рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП macOS (me) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдпрдорд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреАред


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi468841/


All Articles