当前位置: 首页 > 知识库问答 >
问题:

用gradle maven-publish插件导出的Kotlin Android库模块不添加依赖项

锺离烈
2023-03-14

我正在尝试使用 gradle 的 maven-publish 插件导出在 Kotlin 中开发的 Android 库模块。aar文件已成功生成并导出,但是没有向其添加任何依赖项 - 甚至连Kotlin文件都没有。以下是基于此答案的插件配置:

apply plugin: 'maven-publish'

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

ext {
    releaseRepository = "s3://****/maven/releases"
    snapshotsRepository = "s3://****/maven/snapshots"
    artifactRepository = "$buildDir/outputs/aar/render-engine-release.aar"

    _version = properties.getProperty('lib.version')
    _artifact = properties.getProperty('lib.name')
    _group = properties.getProperty('lib.group')
}


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

publishing {
    publications {
        maven(MavenPublication) {
            groupId _group
            artifactId _artifact
            version _version
            artifact (sourceJar)
            artifact artifactRepository

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

                configurations.compile.allDependencies.each {
                    if(_group != null && (_artifact != null || "unspecified" == _artifact) && _version != null) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')

                        dependencyNode.appendNode('groupId', _group)
                        dependencyNode.appendNode('artifactId', _artifact)
                        dependencyNode.appendNode('version', _version)
                    }
                }
            }
        }
    }

    repositories {
        maven {
            if(_version.endsWith('-SNAPSHOT')) {
                url snapshotsRepository
            } else {
                url releaseRepository
            }

           credentials(AwsCredentials) {
                accessKey AWS_ACCESS_KEY
                secretKey AWS_SECRET_KEY
           }
        }
    }
}

共有1个答案

华良才
2023-03-14

好的,继续阅读链接问题的答案,我已经实现了这个来解决我的问题。我的最后publish.gradle是:

apply plugin: 'maven-publish'

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

ext {
    releaseRepository = "s3://****/maven/releases"
    snapshotsRepository = "s3://****/maven/snapshots"
    artifactRepository = "$buildDir/outputs/aar/render-engine-release.aar"

    _version = properties.getProperty('lib.version')
    _artifact = properties.getProperty('lib.name')
    _group = properties.getProperty('lib.group')
}


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

publishing {
    publications {
        maven(MavenPublication) {
            groupId _group
            artifactId _artifact
            version _version
            artifact(sourceJar)
            artifact artifactRepository

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

                configurations.compile.getAllDependencies().each { Dependency dep ->
                    if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified")
                        return

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

                    if (!dep.transitive) {
                        def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion')
                        exclusionNode.appendNode('groupId', '*')
                        exclusionNode.appendNode('artifactId', '*')
                    } else if (!dep.properties.excludeRules.empty) {
                        def exclusionsNode = dependencyNode.appendNode('exclusions')
                        dep.properties.excludeRules.each { ExcludeRule rule ->
                            def exclusionNode = exclusionsNode.appendNode('exclusion')
                            exclusionNode.appendNode('groupId', rule.group ?: '*')
                            exclusionNode.appendNode('artifactId', rule.module ?: '*')
                        }
                    }
                }
            }
        }
    }

    repositories {
        maven {
            if (_version.endsWith('-SNAPSHOT')) {
                url snapshotsRepository
            } else {
                url releaseRepository
            }

            credentials(AwsCredentials) {
                accessKey AWS_ACCESS_KEY
                secretKey AWS_SECRET_KEY
            }
        }
    }
}
 类似资料:
  • 问题内容: 使用IntelliJ 2016.2。 使用Gradle 2.14.1 我有2个项目,每个项目都有自己的build.gradle文件和单独的目录结构: 希望您能明白。在IntelliJ中,我具有以下相同级别的模块结构(无子项目): 简单的请求…我想在应用程序内使用。我要在同一个项目中同时开发两个模块。 我尝试在IntelliJ中为添加模块依赖关系。没有骰子。我尝试添加一个jar参考,没有

  • 使用IntelliJ 2016.2. 使用Gradle 2.14.1 我尝试为Intellij中的添加一个模块依赖项到。没有骰子。我试着添加一个jar引用,没有骰子。 我认为我需要在build.gradle文件中添加一个依赖项,但不知道如何添加。我尝试了等。

  • 我有2个maven项目A和B。 B对A的胖jar有一个maven编译时依赖项。 在将B作为maven项目导入时,a作为模块依赖项而不是目标jar添加。 有没有办法禁用此功能? B的pom。xml(依赖项部分) <代码> A的pom.xml(工件细节): <代码> 问题: 这两个是Intellij项目中的模块。无论我以何种方式导入它们,项目B的依赖项列表都将项目A显示为模块依赖项,而不是项目A的ja

  • 当使用一些第三方库时,我将依赖项添加到模块的build.gradle文件中。 或者我添加一个插件 有时,库需要向应用的build.gradle文件添加依赖项。 这些依赖项和插件之间有什么区别 为什么不能在一个构建中设置它们。格雷德尔档案? 所有的建议都很感谢,我在搜索这方面的信息时遇到了困难