From 42c2dd1ff6f860bb1aa62394ed1ddfdd70fd73c3 Mon Sep 17 00:00:00 2001 From: Daniel Green Date: Tue, 1 Oct 2024 15:33:59 +0200 Subject: [PATCH] feat: Added separating publication to local and remote repositories. Changed getting dependencies from sdk and sending to maven with build package --- personalization-sdk/build.gradle | 22 +++++ publish.gradle | 152 +++++++++++++++++-------------- 2 files changed, 108 insertions(+), 66 deletions(-) diff --git a/personalization-sdk/build.gradle b/personalization-sdk/build.gradle index fd654bc0..95a0ed0d 100644 --- a/personalization-sdk/build.gradle +++ b/personalization-sdk/build.gradle @@ -67,6 +67,28 @@ android { namespace 'com.personalization' } +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.recyclerview:recyclerview:1.3.2' + implementation 'com.google.android.material:material:1.12.0' + implementation 'org.jetbrains:annotations:24.1.0' + implementation 'androidx.core:core-ktx:1.13.1' + implementation 'androidx.work:work-runtime-ktx:2.9.1' + implementation 'com.google.code.gson:gson:2.11.0' + implementation 'org.jetbrains.kotlin:kotlin-stdlib' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' + + implementation platform('com.google.firebase:firebase-bom:32.7.0') + implementation 'com.google.firebase:firebase-messaging:23.4.1' + implementation 'com.github.bumptech.glide:glide:4.16.0' + implementation 'androidx.media3:media3-exoplayer:1.4.1' + implementation 'androidx.media3:media3-ui:1.4.1' + implementation 'com.google.dagger:dagger:2.51.1' + kapt 'com.google.dagger:dagger-compiler:2.48' +} + configurations { rees46Debug rees46Release diff --git a/publish.gradle b/publish.gradle index 3c6747f6..99343d99 100644 --- a/publish.gradle +++ b/publish.gradle @@ -24,63 +24,99 @@ def urls = [rees46: "https://github.com/rees46/android-sdk", personaclick: "http def publicationNames = [] +def isPublishingInMavenLocal = false + publishing { publications { android.libraryVariants.all { variant -> - if (variant.buildType.name == "debug") return // Prevents publishing debug library + println "Processing variant: ${variant.name}" + + if (!isPublishingInMavenLocal) { + if (variant.buildType.name == "debug") { + println "Skipping debug variant: ${variant.name}" + return // Prevents publishing debug library + } - if (variant.flavorName != variantName) return + if (variant.flavorName != variantName) { + println "Skipping variant due to flavor mismatch: ${variant.flavorName} != ${variantName}" + return + } + } def flavored = !variant.flavorName.isEmpty() + println "Is flavored variant: ${flavored}" def variantArtifactId = flavored ? variant.flavorName.replace('_', '-') + "-sdk" : project.name + println "Variant Artifact ID before applying flag: ${variantArtifactId}" + + def modifiedGroupId = isPublishingInMavenLocal ? "com.local-${variant.flavorName}" : "com.${variant.flavorName}" + def modifiedArtifactId = isPublishingInMavenLocal ? "local-${variantArtifactId}" : variantArtifactId - def javaDocDestDir = file("${layout.buildDirectory.get().asFile}/docs/javadoc ${flavored ? variantArtifactId : ""}") + println "Final Group ID: ${modifiedGroupId}" + println "Final Artifact ID: ${modifiedArtifactId}" + + def javaDocDestDir = file("${layout.buildDirectory.get().asFile}/docs/javadoc ${flavored ? modifiedArtifactId : ""}") + println "Javadoc Destination Directory: ${javaDocDestDir}" def sourceDirs = variant.sourceSets.collect { it.javaDirectories } - def javadoc = task("${variant.name}Javadoc", type: Javadoc) { - description "Generates Javadoc for ${variant.name}." - source = variant.javaCompileProvider.get().source - destinationDir = javaDocDestDir - classpath += files("${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar") - configurations.implementation.setCanBeResolved(true) - classpath += files(configurations.implementation) - options.links("http://docs.oracle.com/javase/7/docs/api/"); - options.links("http://d.android.com/reference/"); - exclude '**/BuildConfig.java' - exclude '**/R.java' - failOnError false - } - def javadocJar = task("${variant.name}JavadocJar", type: Jar, dependsOn: javadoc) { - description "Puts Javadoc for ${variant.name} in a jar." - archiveClassifier.set('javadoc-' + variant.name) - from javadoc.destinationDir + println "Source Directories: ${sourceDirs}" + + def javadoc + def javadocJar + + if (!isPublishingInMavenLocal || variant.buildType.name == "release") { + javadoc = task("${variant.name}Javadoc", type: Javadoc) { + description "Generates Javadoc for ${variant.name}." + source = variant.javaCompileProvider.get().source + destinationDir = javaDocDestDir + classpath += files("${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar") + configurations.implementation.setCanBeResolved(true) + classpath += files(configurations.implementation) + options.links("http://docs.oracle.com/javase/7/docs/api/"); + options.links("http://d.android.com/reference/"); + exclude '**/BuildConfig.java' + exclude '**/R.java' + failOnError false + } + println "Created Javadoc task for variant: ${variant.name}" + + javadocJar = task("${variant.name}JavadocJar", type: Jar, dependsOn: javadoc) { + description "Puts Javadoc for ${variant.name} in a jar." + archiveClassifier.set('javadoc-' + variant.name) + from javadoc.destinationDir + } + println "Created JavadocJar task for variant: ${variant.name}" } + def sourcesJar = task("${variant.name}SourcesJar", type: Jar) { description "Puts sources for ${variant.name} in a jar." archiveClassifier.set('sources-' + variant.name) from sourceDirs } + println "Created SourcesJar task for variant: ${variant.name}" def publicationName = "${variant.name.capitalize()}Library" publicationNames.add(publicationName) + println "Adding publication: ${publicationName}" "$publicationName"(MavenPublication) { - artifactId variantArtifactId - groupId "com.${variant.flavorName}" + artifactId modifiedArtifactId + groupId modifiedGroupId version version artifact variant.packageLibraryProvider.get() artifact sourcesJar - artifact javadocJar + if (javadocJar != null) { + artifact javadocJar + } pom { packaging 'aar' withXml { def root = asNode() - root.appendNode("name", variantArtifactId) + root.appendNode("name", modifiedArtifactId) root.appendNode("description", "${variant.flavorName.toUpperCase()} Android SDK") root.appendNode("url", url) root.children().last() + pomConfig @@ -112,60 +148,44 @@ publishing { } } } - println "implementation '${groupId}:${artifactId}:${version}'" } } repositories { - mavenLocal() - - maven { - name = "GitHubPackages" + if (isPublishingInMavenLocal) { + mavenLocal() + println "Publishing to local maven repository (mavenLocal) due to flag isPublishingInMavenLocal=true" + } else { + println "Publishing to local maven repository" + } - credentials { - username ossrhUsername - password ossrhPassword - } + maven { + name = "GitHubPackages" + credentials { + username ossrhUsername + password ossrhPassword + } + url = uri(publishUrl) + println "Configured GitHub Packages repository with URL: ${publishUrl}" + } - url = uri(publishUrl) - } - maven { - name = "sonatype" + maven { + name = "sonatype" - def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" - def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" + def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" + def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" - credentials { - username sonataUsername - password sonataPassword - } + credentials { + username sonataUsername + password sonataPassword + } - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - } + url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + println "Configured Sonatype repository with URL: ${url}" + } } } -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - - implementation platform('com.google.firebase:firebase-bom:32.7.0') - implementation 'com.google.firebase:firebase-messaging:23.4.1' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.recyclerview:recyclerview:1.3.2' - implementation 'com.google.android.material:material:1.12.0' - implementation 'org.jetbrains:annotations:24.1.0' - implementation 'com.github.bumptech.glide:glide:4.16.0' - implementation 'androidx.media3:media3-exoplayer:1.2.1' - implementation 'androidx.media3:media3-ui:1.2.1' - implementation 'androidx.core:core-ktx:1.13.1' - implementation 'androidx.work:work-runtime-ktx:2.9.0' - implementation 'com.google.code.gson:gson:2.11.0' - implementation 'com.google.dagger:dagger:2.51.1' - kapt 'com.google.dagger:dagger-compiler:2.48' - implementation 'org.jetbrains.kotlin:kotlin-stdlib' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' -} - def sonatypeIds = [rees46: sonatype_rees46, personaclick: sonatype_personaclick] afterEvaluate {