【问题标题】:How to attach sources of an AAR file with maven-publish gradle plugin?如何使用 maven-publish gradle 插件附加 AAR 文件的源?
【发布时间】:2019-08-05 14:57:54
【问题描述】:

我将 AAR 发布到我团队的另一部分,该部分只检查此 AAR,而不是源代码。

我想无缝地为他们提供源代码(使用 Ctrl + 单击类或 Ctrl + B 直接在 Android Studio 中获取源代码)。

据我了解,只有 .jar 档案才有可能,而不是 .aar。

这是 maven-publish 配置文件。我可以将档案(调试、“发布”和源代码)发布到 maven。我可以获得调试依赖项(“xxx-debug.aar”)。我可以手动下载源(“xxx-sources.jar”)并通过 Android Studio 中的“选择源...”链接它们。但是链接不像任何其他体面的库(Retrofit 或 OkHttp 浮现在脑海中)是自动的:

// MAVEN PUBLICATION

apply plugin: 'maven-publish'

task sourceJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier "sources"
}

publishing {

    group = 'foo.bar.rootpackage'
    version = "foobar1.0"

    publications {

        aar(MavenPublication) {

            println("Maven publish: package name is ${aarName}")

            groupId group
            artifactId sdkModuleName
            version version

            artifact(sourceJar)

            def debugAar = "$buildDir/outputs/aar/${aarName}-debug.aar"
            if (new File(debugAar).exists()) {
                artifact(debugAar) {
                    classifier 'debug'
                    extension 'aar'
                }
            }

            def releaseAar = "$buildDir/outputs/aar/${aarName}-release.aar"
            if (new File(releaseAar).exists()) {
                artifact(releaseAar) {
                    extension 'aar'
                }
            }

            //The publication doesn't know about our dependencies, so we have to manually add them to the pom
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')

                def compileTimeDependencies = configurations.api.allDependencies +
                        configurations.implementation.allDependencies +
                        configurations.releaseImplementation.allDependencies

                appendDependencies(compileTimeDependencies, dependenciesNode)
            }
        }
    }

    repositories {
        maven {
            // PRIVATE MAVEN STUFF
        }
    }
}

ext {
    appendDependencies = { Set<Dependency> compileTimeDependencies, dependenciesNode ->

        compileTimeDependencies.each {
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', it.group)
            dependencyNode.appendNode('artifactId', it.name)
            dependencyNode.appendNode('version', it.version)

            if (!it.excludeRules.isEmpty()) {
                def exclusionsNode = dependencyNode.appendNode('exclusions')
                it.excludeRules.each { rule ->
                    def exclusionNode = exclusionsNode.appendNode('exclusion')
                    exclusionNode.appendNode('groupId', rule.group)
                    exclusionNode.appendNode('artifactId', rule.module ?: '*')
                }
            }
        }
    }
}


在需要此依赖项的其他项目的 build.gradle 中,我实现了这样的依赖项:

    debugApi("foo.bar.rootpackage:core:$foobar1.0:debug@aar") {
        transitive = true
    }
    releaseApi("foo.bar.rootpackage:core:$foobar1.0@aar") {
        transitive = true
    }

项目构建,但没有与源的“自动链接”。

如何解决?

【问题讨论】:

标签: java android maven gradle android-gradle-plugin


【解决方案1】:

使用android-maven-publish。链接源包应该发生在生成的 POM 中。

【讨论】:

  • 感谢您的链接,但它不再适用于 5.0+(或即将推出的 6.0+)
  • 插件版本 3.6.2 应该与 Gradle 4.8 一起使用。对于 Gradle 5.0,您必须使用 afterEvaluate - 或 org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact
猜你喜欢
  • 2015-07-30
  • 2021-03-31
  • 1970-01-01
  • 2020-11-17
  • 2021-02-21
  • 2021-12-25
  • 2019-11-13
  • 1970-01-01
  • 2019-06-08
相关资源
最近更新 更多