Zhuinden / simple-stack

[ACTIVE] Simple Stack, a backstack library / navigation framework for simpler navigation and state management (for fragments, views, or whatevers).
Apache License 2.0
1.36k stars 76 forks source link

2.6.3 is probably DOA #257

Closed Zhuinden closed 2 years ago

Zhuinden commented 2 years ago

Maven-Publish task has been a pain in the ass, and the transitive dependencies didn't get added. This used to work previously and apparently something in Gradle changed and so now it didn't.

I'll probably have to release 2.6.4 to fix it because I see that some people have already updated, but they could run into "no class def found error" on StateBundle even though that is not intended behavior, you shouldn't need to manually add it.

Zhuinden commented 2 years ago

So the reason why this happened is because 2.6.2 was still released with the install command, however the 2.6.3 was released by Jitpack using the ./gradlew clean -Pgroup=com.github.Zhuinden -Pversion=2.6.3 -xtest -xlint assemble publishToMavenLocal command.

Install and publishToMavenLocal work differently, namely that publishToMavenLocal is not smart. It only appends your dependencies if you explicitly tell it to, or at least it tried appending them as compile but that's ignored by Gradle now.

So what I did now is force add the dependencies to the POM.XML in every scope

// build a jar with source files
val sourcesJar by tasks.registering(Jar::class) {
    from(android.sourceSets["main"].java.srcDirs)
    archiveClassifier.set("sources")
}

val javadoc by tasks.registering(Javadoc::class) {
    configurations.implementation.get().isCanBeResolved = true
    configurations.api.get().isCanBeResolved = true

    isFailOnError = false
    source = android.sourceSets["main"].java.getSourceFiles()
    classpath += project.files(android.bootClasspath.joinToString(separator = File.pathSeparator))
    classpath += configurations.api
}

// build a jar with javadoc
val javadocJar by tasks.registering(Jar::class) {
    dependsOn(javadoc)
    archiveClassifier.set("javadoc")
    from(javadoc.get().destinationDir)
}

artifacts {
    archives(sourcesJar)
    archives(javadocJar)
}

afterEvaluate {
    publishing {
        publications {
            register("mavenJava", MavenPublication::class) {
                groupId = "com.github.Zhuinden"
                artifactId = "simple-stack"
                version = "2.6.3"

                from(components["release"])
                artifact(sourcesJar.get())

                pom.withXml {
                    val dependenciesNode: groovy.util.Node =
                        (asNode().get("dependencies") as groovy.util.NodeList).get(0) as groovy.util.Node
                    val configurationNames = arrayOf("implementation", "api")

                    configurationNames.forEach { configurationName ->
                        configurations[configurationName].allDependencies.forEach {
                            if (it.group != null && it.version != "unspecified") {
                                val dependencyNode = dependenciesNode.appendNode("dependency")
                                dependencyNode.appendNode("groupId", it.group)
                                dependencyNode.appendNode("artifactId", it.name)
                                dependencyNode.appendNode("version", it.version)
                                dependencyNode.appendNode("scope", configurationName)
                            }
                        }
                    }
                }
            }
        }
    }
}

However I did notice that javadoc no longer gets added. 😒 I hope the sources-jar is enough.

Zhuinden commented 2 years ago

Eventually I removed scope because it was still not working.

Fingers crossed that it works now with 2.6.4...

Zhuinden commented 2 years ago

2.6.4 is released and it works.

2.6.3 no longer exists.