Android 库在发布时设置本地依赖项的版本

问题描述

简短版本: 模块 A 和 B 是我的 Android 库的模块。 在发布依赖于模块B的模块A时,如何在发布过程中设置模块B的版本?

我使用 Kotlin 开发了一个带有多个模块的 Android 库,其中一些模块相互依赖。我使用 JFrog Artifactory 进行托管,使用它的 gradle 插件来发布库模块。 为了生成有效的 POM,我在模块 build.gradle 的发布闭包中手动生成它。将模块集成到不同的项目中时,在接收模块的所有依赖项时,我无法设置本地依赖项的版本。

我用来设置本地依赖的代码

implementation project(path: ':core')
implementation project(path: ':auth')

我用来生成 POM 的代码

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getbootclasspath().join(File.pathSeparator))
    options {
        failOnError false
        encoding "UTF-8"
        charSet "UTF-8"
        addStringOption('Xdoclint:none','-quiet')
    }
    android.libraryVariants.all { variant ->
        if (variant.name == 'release') {
            variant.javaCompileProvider.configure{
                owner.classpath += variant.javaCompiler.classpath
            }
        }
    }
    exclude '**/R.html','**/R.*.html','**/index.html'
}

task androidJavadocsJar(type: Jar,dependsOn: androidJavadocs) {
    archiveClassifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    archiveClassifier = 'sources'
}

publishing {
    publications {
        aar(MavenPublication) {
            groupId POM_GROUP_ID
            artifactId POM_ARTIFACT_ID
            version POM_VERSION
            description POM_DESCRIPTION

            artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
            artifact androidJavadocsJar
            artifact sourcesJar

            pom.withXml {
                final dependenciesNode = asNode().appendNode('dependencies')

                ext.addDependency = { Dependency dep,String scope ->
                    if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
                        return // ignore invalid dependencies
                    if (dep.group == "MyDevGroup") // I am skipping my local dependencies on other modules
                        return // ignore invalid dependencies

                    final dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId',dep.group)
                    dependencyNode.appendNode('artifactId',dep.name)
                    dependencyNode.appendNode('version',dep.version)
                    dependencyNode.appendNode('scope',scope)

                    if (!dep.transitive) {
                        // If this dependency is transitive,we should force exclude all its dependencies them from the POM
                        final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
                        exclusionNode.appendNode('groupId','*')
                        exclusionNode.appendNode('artifactId','*')
                    } else if (!dep.properties.excludeRules.empty) {
                        // Otherwise add specified exclude rules
                        final exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
                        dep.properties.excludeRules.each { ExcludeRule rule ->
                            exclusionNode.appendNode('groupId',rule.group ?: '*')
                            exclusionNode.appendNode('artifactId',rule.module ?: '*')
                        }
                    }
                }

                // List all "compile" dependencies (for old Gradle)
                configurations.compile.getDependencies().each { dep -> addDependency(dep,"compile") }
                // List all "api" dependencies (for new Gradle) as "compile" dependencies
                configurations.api.getDependencies().each { dep -> addDependency(dep,"compile") }
                // List all "implementation" dependencies (for new Gradle) as "runtime" dependencies
                configurations.implementation.getDependencies().each { dep -> addDependency(dep,"runtime") }
            }

        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)