@@ -3,43 +3,62 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary
33import com.vanniktech.maven.publish.MavenPublishBaseExtension
44import org.gradle.api.Plugin
55import org.gradle.api.Project
6- import org.gradle.api.tasks.testing.Test
7- import org.gradle.kotlin.dsl.apply
8- import org.gradle.kotlin.dsl.configure
9- import org.gradle.kotlin.dsl.withType
6+ import org.gradle.kotlin.dsl.*
107import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
8+ import org.gradle.api.tasks.testing.Test
119import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
10+ import org.gradle.testing.jacoco.tasks.JacocoReport
1211
1312class PublishingConventionPlugin : Plugin <Project > {
1413 override fun apply (project : Project ) {
1514 project.run {
15+
1616 applyPlugins()
1717 configureJacoco()
18- configureMavenPublishing ()
18+ configureVanniktechPublishing ()
1919 }
2020 }
2121
2222 private fun Project.applyPlugins () {
2323 apply (plugin = " com.android.library" )
24- apply (plugin = " com.mxalbert.gradle.jacoco-android" )
2524 apply (plugin = " org.jetbrains.dokka" )
25+ apply (plugin = " org.gradle.jacoco" )
2626 apply (plugin = " com.vanniktech.maven.publish" )
2727 }
2828
2929 private fun Project.configureJacoco () {
3030 configure<JacocoPluginExtension > {
31- toolVersion = " 0.8.7 "
31+ toolVersion = " 0.8.11 " // Compatible with newer JDKs
3232 }
3333
34- tasks.withType<Test >().configureEach {
35- extensions.configure(JacocoTaskExtension ::class .java) {
36- isIncludeNoLocationClasses = true
37- excludes = listOf (" jdk.internal.*" )
38- }
34+ // AGP 9.0+ built-in Jacoco support or manual configuration.
35+ // We create a "jacocoTestReport" task to match the CI workflow.
36+
37+ tasks.register<JacocoReport >(" jacocoTestReport" ) {
38+ // Dependencies
39+ dependsOn(" testDebugUnitTest" )
40+
41+ reports {
42+ xml.required.set(true )
43+ html.required.set(true )
44+ }
45+
46+ // Source directories
47+ val mainSrc = " ${layout.projectDirectory} /src/main/java"
48+ sourceDirectories.setFrom(files(mainSrc))
49+
50+ // Class directories - we need to point to where Kotlin compiles to
51+ val debugTree = fileTree(" ${layout.buildDirectory.get()} /tmp/kotlin-classes/debug" )
52+ classDirectories.setFrom(files(debugTree))
53+
54+ // Execution data from the unit test task
55+ executionData.setFrom(fileTree(layout.buildDirectory.get()) {
56+ include(" outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec" )
57+ })
3958 }
4059 }
4160
42- private fun Project.configureMavenPublishing () {
61+ private fun Project.configureVanniktechPublishing () {
4362 extensions.configure<MavenPublishBaseExtension > {
4463 configure(
4564 AndroidSingleVariantLibrary (
@@ -48,8 +67,10 @@ class PublishingConventionPlugin : Plugin<Project> {
4867 publishJavadocJar = true
4968 )
5069 )
70+
5171 publishToMavenCentral()
5272 signAllPublications()
73+
5374 pom {
5475 name.set(project.name)
5576 description.set(" Jetpack Compose components for the Places SDK for Android" )
@@ -66,17 +87,17 @@ class PublishingConventionPlugin : Plugin<Project> {
6687 developerConnection.set(" scm:git@github.com:googlemaps/android-places-compose.git" )
6788 url.set(" https://github.com/googlemaps/android-places-compose" )
6889 }
69- organization {
70- name.set(" Google Inc" )
71- url.set(" http://developers.google.com/maps" )
72- }
7390 developers {
7491 developer {
7592 id.set(" google" )
7693 name.set(" Google Inc." )
7794 }
7895 }
96+ organization {
97+ name.set(" Google Inc" )
98+ url.set(" http://developers.google.com/maps" )
99+ }
79100 }
80101 }
81102 }
82- }
103+ }
0 commit comments