diff --git a/appyx-interactions/common/build.gradle.kts b/appyx-interactions/common/build.gradle.kts index 62ca9d3d9..72ee1489e 100644 --- a/appyx-interactions/common/build.gradle.kts +++ b/appyx-interactions/common/build.gradle.kts @@ -36,7 +36,7 @@ kotlin { api(compose.runtime) api(compose.foundation) api(compose.material) - api(project(":utils:multiplatform")) + api(project(":utils:utils-multiplatform")) implementation(libs.kotlinx.serialization.json) } } diff --git a/appyx-navigation/common/build.gradle.kts b/appyx-navigation/common/build.gradle.kts index d1769c02c..dd47cf57f 100644 --- a/appyx-navigation/common/build.gradle.kts +++ b/appyx-navigation/common/build.gradle.kts @@ -34,9 +34,9 @@ kotlin { api(compose.runtime) api(compose.foundation) api(compose.material) - api(project(":utils:multiplatform")) + api(project(":utils:utils-multiplatform")) implementation(libs.kotlinx.serialization.json) - api(project(":utils:customisations")) + api(project(":utils:utils-customisations")) api(project(":appyx-interactions:appyx-interactions")) } } diff --git a/build.gradle.kts b/build.gradle.kts index 725a1f570..c28ec7ce5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -72,7 +72,7 @@ allprojects { configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("com.bumble.appyx:customisations")) - .using(project(":utils:customisations")) + .using(project(":utils:utils-customisations")) .because("RIBs uses Appyx customisations as external dependency") } } diff --git a/demos/appyx-interactions/android/build.gradle.kts b/demos/appyx-interactions/android/build.gradle.kts index 1f46a06fa..fd81ac4fc 100644 --- a/demos/appyx-interactions/android/build.gradle.kts +++ b/demos/appyx-interactions/android/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { implementation(project(":appyx-components:experimental:modal:modal")) implementation(project(":appyx-components:experimental:puzzle15:android")) implementation(project(":appyx-components:internal:test-drive:android")) - implementation(project(":utils:material3")) + implementation(project(":utils:utils-material3")) implementation(libs.androidx.activity.compose) implementation(libs.androidx.appcompat) diff --git a/demos/appyx-navigation/common/build.gradle.kts b/demos/appyx-navigation/common/build.gradle.kts index 5bf4cc8e1..0c958cdc9 100644 --- a/demos/appyx-navigation/common/build.gradle.kts +++ b/demos/appyx-navigation/common/build.gradle.kts @@ -35,9 +35,9 @@ kotlin { api(compose.material3) implementation(libs.kotlinx.serialization.json) api(project(":appyx-interactions:appyx-interactions")) - api(project(":utils:customisations")) - api(project(":utils:material3")) - api(project(":utils:multiplatform")) + api(project(":utils:utils-customisations")) + api(project(":utils:utils-material3")) + api(project(":utils:utils-multiplatform")) api(project(":demos:image-loader:common")) implementation(project(":appyx-components:experimental:cards:cards")) implementation(project(":appyx-components:experimental:modal:modal")) diff --git a/demos/mkdocs/appyx-interactions/interactions/sample1/web/build.gradle.kts b/demos/mkdocs/appyx-interactions/interactions/sample1/web/build.gradle.kts index ac43853b6..ddc7c9c4e 100644 --- a/demos/mkdocs/appyx-interactions/interactions/sample1/web/build.gradle.kts +++ b/demos/mkdocs/appyx-interactions/interactions/sample1/web/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { api(compose.material) implementation(project(":appyx-interactions:appyx-interactions")) implementation(project(":appyx-components:internal:test-drive:test-drive")) - implementation(project(":utils:multiplatform")) + implementation(project(":utils:utils-multiplatform")) } } val jsMain by getting { diff --git a/demos/mkdocs/appyx-interactions/interactions/sample2/web/build.gradle.kts b/demos/mkdocs/appyx-interactions/interactions/sample2/web/build.gradle.kts index ccbb77f0a..bef46c73f 100644 --- a/demos/mkdocs/appyx-interactions/interactions/sample2/web/build.gradle.kts +++ b/demos/mkdocs/appyx-interactions/interactions/sample2/web/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { api(compose.material) implementation(project(":appyx-interactions:appyx-interactions")) implementation(project(":appyx-components:internal:test-drive:test-drive")) - implementation(project(":utils:multiplatform")) + implementation(project(":utils:utils-multiplatform")) } } val jsMain by getting { diff --git a/demos/mkdocs/appyx-interactions/interactions/sample3/web/build.gradle.kts b/demos/mkdocs/appyx-interactions/interactions/sample3/web/build.gradle.kts index 54b77faed..117730583 100644 --- a/demos/mkdocs/appyx-interactions/interactions/sample3/web/build.gradle.kts +++ b/demos/mkdocs/appyx-interactions/interactions/sample3/web/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { api(compose.material) implementation(project(":appyx-interactions:appyx-interactions")) implementation(project(":appyx-components:internal:test-drive:test-drive")) - implementation(project(":utils:multiplatform")) + implementation(project(":utils:utils-multiplatform")) } } val jsMain by getting { diff --git a/demos/sandbox-appyx-navigation/common/build.gradle.kts b/demos/sandbox-appyx-navigation/common/build.gradle.kts index a500546bc..2941ab7a0 100644 --- a/demos/sandbox-appyx-navigation/common/build.gradle.kts +++ b/demos/sandbox-appyx-navigation/common/build.gradle.kts @@ -3,7 +3,6 @@ plugins { id("org.jetbrains.compose") id("com.android.library") id("kotlin-parcelize") - id("appyx-publish-multiplatform") id("com.google.devtools.ksp") } @@ -36,9 +35,9 @@ kotlin { api(compose.material3) implementation(libs.kotlinx.serialization.json) api(project(":appyx-interactions:appyx-interactions")) - api(project(":utils:material3")) - api(project(":utils:customisations")) - api(project(":utils:multiplatform")) + api(project(":utils:utils-material3")) + api(project(":utils:utils-customisations")) + api(project(":utils:utils-multiplatform")) implementation(project(":appyx-components:experimental:cards:cards")) implementation(project(":appyx-components:experimental:modal:modal")) implementation(project(":appyx-components:experimental:promoter:promoter")) diff --git a/plugins/publish-plugin/src/main/kotlin/AndroidAppyxPublishPlugin.kt b/plugins/publish-plugin/src/main/kotlin/AndroidAppyxPublishPlugin.kt index bee9cd0bf..b23503ff4 100644 --- a/plugins/publish-plugin/src/main/kotlin/AndroidAppyxPublishPlugin.kt +++ b/plugins/publish-plugin/src/main/kotlin/AndroidAppyxPublishPlugin.kt @@ -22,6 +22,11 @@ internal class AndroidAppyxPublishPlugin : ProjectPlugin() { } } + override fun apply(project: Project) { + project.extensions.create("publishingPlugin", ProjectPluginExtension::class.java) + super.apply(project) + } + override fun PublicationContainer.createPublications(project: Project) { create("androidRelease") { val artifactId = project.extensions.getByType(ProjectPluginExtension::class.java).artifactId diff --git a/plugins/publish-plugin/src/main/kotlin/JavaAppyxPublishPlugin.kt b/plugins/publish-plugin/src/main/kotlin/JavaAppyxPublishPlugin.kt index 2e6004ef3..8d97e437d 100644 --- a/plugins/publish-plugin/src/main/kotlin/JavaAppyxPublishPlugin.kt +++ b/plugins/publish-plugin/src/main/kotlin/JavaAppyxPublishPlugin.kt @@ -7,6 +7,12 @@ import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.get internal class JavaAppyxPublishPlugin : ProjectPlugin() { + + override fun apply(project: Project) { + project.extensions.create("publishingPlugin", ProjectPluginExtension::class.java) + super.apply(project) + } + override fun configureDocAndSources(project: Project) { project.configure { withJavadocJar() diff --git a/plugins/publish-plugin/src/main/kotlin/MultiplatformAppyxPublishPlugin.kt b/plugins/publish-plugin/src/main/kotlin/MultiplatformAppyxPublishPlugin.kt index b4e2e593c..675f458eb 100644 --- a/plugins/publish-plugin/src/main/kotlin/MultiplatformAppyxPublishPlugin.kt +++ b/plugins/publish-plugin/src/main/kotlin/MultiplatformAppyxPublishPlugin.kt @@ -1,4 +1,3 @@ - import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.publish.PublicationContainer @@ -7,20 +6,33 @@ import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.tasks.bundling.Jar internal class MultiplatformAppyxPublishPlugin : ProjectPlugin() { + override fun apply(project: Project) { + super.apply(project) + project.gradle.projectsEvaluated { + if (project.name == "common") { + throw IllegalArgumentException( + "Multiplatform project with path ${project.projectDir} should not have its name as common." + + " This will make artifacts rewrite each other." + + " Please change the name of the project in settings.gradle" + ) + } + } + } override fun PublicationContainer.createPublications(project: Project) = Unit override fun PublishingExtension.configurePublications(project: Project) { publications.withType(MavenPublication::class.java).configureEach { val publication = this - val javadocJar = project.tasks.register("${publication.name}JavadocJar", Jar::class.java) { - group = JavaBasePlugin.DOCUMENTATION_GROUP - description = "Assembles ${publication.name} Kotlin docs into a Javadoc jar" - archiveClassifier.set("javadoc") - - // https://github.com/gradle/gradle/issues/26091 - archiveBaseName.set("${archiveBaseName.get()}-${publication.name}") - } + val javadocJar = + project.tasks.register("${publication.name}JavadocJar", Jar::class.java) { + group = JavaBasePlugin.DOCUMENTATION_GROUP + description = "Assembles ${publication.name} Kotlin docs into a Javadoc jar" + archiveClassifier.set("javadoc") + + // https://github.com/gradle/gradle/issues/26091 + archiveBaseName.set("${archiveBaseName.get()}-${publication.name}") + } artifact(javadocJar) configurePublication(project) } diff --git a/plugins/publish-plugin/src/main/kotlin/ProjectPlugin.kt b/plugins/publish-plugin/src/main/kotlin/ProjectPlugin.kt index c65135cb9..b7600bf1f 100644 --- a/plugins/publish-plugin/src/main/kotlin/ProjectPlugin.kt +++ b/plugins/publish-plugin/src/main/kotlin/ProjectPlugin.kt @@ -8,10 +8,6 @@ import org.gradle.kotlin.dsl.configure import org.gradle.plugins.signing.SigningExtension -open class ProjectPluginExtension { - var artifactId: String = "" -} - internal abstract class ProjectPlugin : Plugin { companion object { @@ -20,7 +16,6 @@ internal abstract class ProjectPlugin : Plugin { } override fun apply(project: Project) { - project.extensions.create("publishingPlugin", ProjectPluginExtension::class.java) project.pluginManager.apply { apply("maven-publish") apply("signing") diff --git a/plugins/publish-plugin/src/main/kotlin/ProjectPluginExtension.kt b/plugins/publish-plugin/src/main/kotlin/ProjectPluginExtension.kt new file mode 100644 index 000000000..674045888 --- /dev/null +++ b/plugins/publish-plugin/src/main/kotlin/ProjectPluginExtension.kt @@ -0,0 +1,8 @@ +/** + * Artifact id for Android and Java publications. When applied to multiplatform project, publication + * creates wrong artifacts. To configure correct artifactId for Multiplatform module publication please + * change a project name for the module in settings.gradle file + */ +open class ProjectPluginExtension { + var artifactId: String = "" +} diff --git a/settings.gradle.kts b/settings.gradle.kts index e7c270b97..4c67664e4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -108,3 +108,6 @@ project(":appyx-components:experimental:puzzle15:common").name = "puzzle15" project(":appyx-components:experimental:puzzle15:web").name = "puzzle15-web" project(":appyx-components:internal:test-drive:common").name = "test-drive" project(":demos:sandbox-appyx-navigation:web").name = "navigation-web" +project(":utils:customisations").name = "utils-customisations" +project(":utils:material3").name = "utils-material3" +project(":utils:multiplatform").name = "utils-multiplatform" diff --git a/utils/customisations/build.gradle.kts b/utils/customisations/build.gradle.kts index 06605fb95..6112939c7 100644 --- a/utils/customisations/build.gradle.kts +++ b/utils/customisations/build.gradle.kts @@ -8,10 +8,6 @@ appyx { androidNamespace.set("com.bumble.appyx.utils.customisation") } -publishingPlugin { - artifactId = "utils-customisations" -} - kotlin { androidTarget { publishLibraryVariants("release") diff --git a/utils/material3/build.gradle.kts b/utils/material3/build.gradle.kts index 7720afeec..4045a4a72 100644 --- a/utils/material3/build.gradle.kts +++ b/utils/material3/build.gradle.kts @@ -9,10 +9,6 @@ appyx { androidNamespace.set("com.bumble.appyx.utils.material3") } -publishingPlugin { - artifactId = "utils-material3" -} - kotlin { androidTarget { publishLibraryVariants("release") diff --git a/utils/multiplatform/build.gradle.kts b/utils/multiplatform/build.gradle.kts index 8bb8b4545..eed86cfd3 100644 --- a/utils/multiplatform/build.gradle.kts +++ b/utils/multiplatform/build.gradle.kts @@ -10,10 +10,6 @@ appyx { androidNamespace.set("com.bumble.appyx.utils.multiplatform") } -publishingPlugin { - artifactId = "utils-multiplatform" -} - kotlin { androidTarget { publishLibraryVariants("release") diff --git a/utils/testing-unit-common/build.gradle.kts b/utils/testing-unit-common/build.gradle.kts index d0ff2c45d..964eb0a21 100644 --- a/utils/testing-unit-common/build.gradle.kts +++ b/utils/testing-unit-common/build.gradle.kts @@ -17,6 +17,6 @@ appyx { dependencies { api(project(":appyx-navigation:appyx-navigation")) - implementation(project(":utils:customisations")) + implementation(project(":utils:utils-customisations")) implementation(libs.kotlin.test) }