Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 3 additions & 75 deletions bom/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,79 +17,7 @@
*/

plugins {
id("maven-publish")
id("java-platform")
`maven-publish`
`java-platform`
alias(libs.plugins.arcgismaps.kotlin.bom.convention)
}

// Find these in properties passed through command line or read from GRADLE_HOME/gradle.properties
// or local gradle.properties
val artifactoryGroupId: String by project
val artifactoryArtifactBaseId: String by project
val artifactoryArtifactId: String = "$artifactoryArtifactBaseId-${project.name}"
val artifactoryUrl: String by project
val artifactoryUsername: String by project
val artifactoryPassword: String by project
val versionNumber: String by project
val buildNumber: String by project
val finalBuild: Boolean = (project.properties["finalBuild"] ?: "false")
.run { this == "true" }
val artifactVersion: String = if (finalBuild) {
versionNumber
} else {
"$versionNumber-$buildNumber"
}

// ensure that the evaluation of the bom project happens after all other projects
// so that plugins are applied to all projects, and can be used to identify
// which projects should get written into the BOM's pom file.
rootProject.subprojects.filter {
it.name != project.name
}.forEach {
evaluationDependsOn(":${it.name}")
}

// now find projects which are publishable based on their inclusion
// of the publishing plugin, and add them as api dependencies.
dependencies {
constraints {
project.rootProject.subprojects.filter {
it.plugins.findPlugin("artifact-deploy") != null
}.forEach { subproject ->
// add all the intended library projects as api dependencies.
api(subproject)
}
}
}

afterEvaluate {
/**
* Maven publication configuration for aar and pom file. Run as follows:
* ./gradlew publishAarPublicationToMavenRepository -PartifactoryUsername=<username> -PartifactoryPassword=<password>
*
* More details:
* https://docs.gradle.org/current/userguide/publishing_maven.html
*/
publishing {
publications {
create<MavenPublication>("bom") {
groupId = artifactoryGroupId
artifactId = artifactoryArtifactId
version = artifactVersion

from(components["javaPlatform"])
}
}

repositories {
maven {
url = uri(artifactoryUrl)
credentials {
username = artifactoryUsername
password = artifactoryPassword
}
}
}
}
}


18 changes: 18 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@ tasks.withType<KotlinCompile>().configureEach {
}

dependencies {
compileOnly(gradleApi())
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.android.tools.common)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
implementation(libs.dokka.gradle.plugin)
}

tasks {
Expand Down Expand Up @@ -58,5 +60,21 @@ gradlePlugin {
id = "arcgismaps.kotlin.microapp"
implementationClass = "ArcGISMapsKotlinMicroappConventionPlugin"
}
register("arcGISMapsKotlinSDK") {
id = "arcgismaps.kotlin.sdk"
implementationClass = "ArcGISMapsKotlinSDKConventionPlugin"
}
register("arcGISMapsRootConventionPlugin") {
id = "arcgismaps.kotlin.root.convention"
implementationClass = "ArcGISMapsRootConventionPlugin"
}
register("arcGISMapsKdocConventionPlugin") {
id = "arcgismaps.kotlin.kdoc.convention"
implementationClass = "ArcGISMapsKdocConventionPlugin"
}
register("arcGISMapsBomConventionPlugin") {
id = "arcgismaps.kotlin.bom.convention"
implementationClass = "ArcGISMapsBomConventionPlugin"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,35 @@
import com.android.build.api.dsl.ApplicationExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureAndroidCompose
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.extensions.debugImplementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.implementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
apply("org.jetbrains.kotlin.plugin.compose")
apply(libs.findPlugin("android-application").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
apply(libs.findPlugin("compose-compiler").get().get().pluginId)
}
val extension = extensions.getByType<ApplicationExtension>()
configureKotlinAndroid(extension)
configureAndroidCompose(extension)

// Add common Compose dependencies for application modules
dependencies {
implementation(platform(libs.findLibrary("androidx-compose-bom").get()))
implementation(libs.findBundle("composeCore").get())
implementation(libs.findBundle("core").get())
implementation(libs.findLibrary("androidx-activity-compose").get())
implementation(libs.findLibrary("androidx-lifecycle-viewmodel-compose").get())
debugImplementation(libs.findBundle("debug").get())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
import com.android.build.api.dsl.ApplicationExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import com.esri.arcgismaps.kotlin.build_logic.extensions.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.get

class AndroidApplicationConventionPlugin: Plugin<Project> {
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
apply(libs.findPlugin("android-application").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
}

extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this)
compileSdk = 35
defaultConfig {

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
minSdk = libs.findVersion("minSdk").get().toString().toInt()
targetSdk = libs.findVersion("targetSdk").get().toString().toInt()
versionCode = libs.findVersion("versionCode").get().toString().toInt()
versionName = libs.findVersion("versionName").get().toString()
targetSdk = libs.findVersion("compileSdk").get().toString().toInt()
versionCode = 1
versionName = "1.0"
}

buildFeatures {
buildConfig = true
}

buildTypes {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,44 @@
import com.android.build.api.dsl.LibraryExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureAndroidCompose
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.extensions.implementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.libs
import com.esri.arcgismaps.kotlin.build_logic.extensions.testImplementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.androidTestImplementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.debugImplementation
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
apply("org.jetbrains.kotlin.plugin.compose")
apply(libs.findPlugin("android-library").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
apply(libs.findPlugin("compose-compiler").get().get().pluginId)
apply(libs.findPlugin("kotlin-parcelize").get().get().pluginId)
apply(libs.findPlugin("kotlin-serialization").get().get().pluginId)
}
val extension = extensions.getByType<LibraryExtension>()
configureKotlinAndroid(extension)
configureAndroidCompose(extension)

// Add common Compose dependencies for library modules
dependencies {
implementation(platform(libs.findLibrary("androidx-compose-bom").get()))
implementation(libs.findBundle("composeCore").get())
implementation(libs.findBundle("core").get())
implementation(libs.findLibrary("androidx-lifecycle-runtime-compose").get())
implementation(libs.findLibrary("androidx-activity-compose").get())
implementation(libs.findLibrary("androidx-material-icons").get())
implementation(libs.findLibrary("kotlinx-serialization-json").get())
testImplementation(libs.findBundle("unitTest").get())
androidTestImplementation(libs.findBundle("composeTest").get())
androidTestImplementation(libs.findBundle("androidXTest").get())
debugImplementation(libs.findBundle("debug").get())
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import com.android.build.gradle.LibraryExtension
import com.esri.arcgismaps.kotlin.build_logic.convention.configureKotlinAndroid
import com.esri.arcgismaps.kotlin.build_logic.convention.implementation
import com.esri.arcgismaps.kotlin.build_logic.convention.libs
import com.esri.arcgismaps.kotlin.build_logic.convention.testImplementation
import com.esri.arcgismaps.kotlin.build_logic.extensions.libs
import com.esri.arcgismaps.kotlin.build_logic.extensions.testImplementation
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
Expand All @@ -13,20 +12,20 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
apply("org.jetbrains.kotlin.android")
apply(libs.findPlugin("android-library").get().get().pluginId)
apply(libs.findPlugin("kotlin-android").get().get().pluginId)
}

extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
compileSdk = 35
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
minSdk = libs.findVersion("minSdk").get().toString().toInt()
lint.targetSdk = libs.findVersion("targetSdk").get().toString().toInt()
lint.targetSdk = libs.findVersion("compileSdk").get().toString().toInt()
consumerProguardFiles("consumer-rules.pro")
}

buildTypes {
Expand All @@ -48,10 +47,6 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {

dependencies {
testImplementation(kotlin("test"))
// External libraries
implementation(libs.findLibrary("androidx-constraintlayout").get())
implementation(libs.findLibrary("androidx-appcompat").get())
implementation(libs.findLibrary("android-material").get())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import com.esri.arcgismaps.kotlin.build_logic.extensions.ToolkitRegistryExtension
import com.esri.arcgismaps.kotlin.build_logic.extensions.api
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.provideDelegate

class ArcGISMapsBomConventionPlugin : Plugin<Project> {
override fun apply(target: Project) = with(target) {
// Platform publishing
pluginManager.apply("maven-publish")
pluginManager.apply("java-platform")

// Find these in properties passed through command line or read from GRADLE_HOME/gradle.properties
// or local gradle.properties
val artifactoryGroupId: String by project
val artifactoryArtifactBaseId: String by project
val artifactoryUrl: String by project
val artifactoryUsername: String by project
val artifactoryPassword: String by project
val versionNumber: String by project
val buildNumber: String by project
val finalBuild: Boolean = (project.properties["finalBuild"] ?: "false").toString() == "true"
val artifactVersion = if (finalBuild) versionNumber else "$versionNumber-$buildNumber"
val artifactoryArtifactId = "$artifactoryArtifactBaseId-${project.name}"

// now find projects which are publishable based on their inclusion of the toolkit plugin,
// and add them as api dependencies.
afterEvaluate {
dependencies {
constraints {
// grab the populated set
val registry = rootProject.extensions.getByType(ToolkitRegistryExtension::class.java)
registry.toolkitProjects.forEach { p ->
val moduleArtifactId = "$artifactoryArtifactBaseId-${p.name}"
// add the toolkit project as api
api("$artifactoryGroupId:$moduleArtifactId:$artifactVersion")
}
}
}
}

/**
* Maven publication configuration for aar and pom file. Run as follows:
* ./gradlew publishAarPublicationToMavenRepository -PartifactoryUsername=<username> -PartifactoryPassword=<password>
*
* More details:
* https://docs.gradle.org/current/userguide/publishing_maven.html
*/
extensions.configure(PublishingExtension::class.java) {
publications {
create("bom", MavenPublication::class.java) {
groupId = artifactoryGroupId
artifactId = artifactoryArtifactId
version = artifactVersion

from(components["javaPlatform"])
}
}
repositories {
maven {
url = uri(artifactoryUrl)
credentials {
username = artifactoryUsername
password = artifactoryPassword
}
}
}
}
}
}
Loading