首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新gradle后,将多模块项目发布到artifactory停止工作

更新gradle后,将多模块项目发布到artifactory停止工作
EN

Stack Overflow用户
提问于 2020-11-25 15:26:09
回答 1查看 1.2K关注 0票数 1

我有一个包含4个模块的库(它们都是aar的)。在更新到每个模块的最新gradle之前,我需要运行artifactoryPublish任务。现在,我需要在触发每个发布任务之前清理和重建一个项目。

代码语言:javascript
复制
> Task :module-1:generatePomFileForAarPublication
> Task :module-1:artifactoryPublish

> Task :extractModuleInfo
No publisher config found for project: android-integration-sdk-light

> Task :module-1:extractModuleInfo
> Task :module-2:extractModuleInfo
> Task :module-3:extractModuleInfo
> Task :module-4:extractModuleInfo
[pool-4-thread-1] Deploying artifact: https://xxx.yyy
[pool-4-thread-1] Deploying artifact: https://xxx.yyy
> Task :artifactoryDeploy

BUILD SUCCESSFUL in 6s

运行的第一个任务

代码语言:javascript
复制
> Task :module-1:generatePomFileForAarPublication
> Task :module-1:artifactoryPublish
> Task :extractModuleInfo UP-TO-DATE
> Task :module-1:extractModuleInfo UP-TO-DATE
> Task :module-2:extractModuleInfo UP-TO-DATE
> Task :module-3:extractModuleInfo UP-TO-DATE
> Task :module-4:extractModuleInfo UP-TO-DATE
> Task :artifactoryDeploy

BUILD SUCCESSFUL in 2s

第二个任务运行

代码语言:javascript
复制
Config for artifactory:

apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
apply from: "../artifactory/config.gradle"

publishing {
    publications {
        aar(MavenPublication) {
            groupId project.groupId
            version project.versionName
            artifactId project.name
            artifact("$buildDir/outputs/aar/${project.getName()}-release.${project.fileExtension}")

            pom.withXml {
                def node = asNode()
                // ugly hack to set the packaging property in the POM as 'aar'
                ((NodeList) node.get('packaging')).get(0).value = project.fileExtension
                def dependenciesNode = node.appendNode('dependencies')
                def cl = { Dependency dep ->
                    if (dep.group == null || dep.name == null || dep.name == "unspecified") {
                        return // ignore invalid dependencies
                    }
                    def dependencyVersion
                    //Only a temporary hack - need more investigation
                    def dependencyGroup
                    if (dep.group == "mobile-library") {
                        dependencyGroup = groupId
                    } else {
                        dependencyGroup = dep.group
                    }

                    //"fix" for compile projects
                    if (dep.version == "unspecified" || dep.version == null) {
                        dependencyVersion = project.versionName
                    } else {
                        dependencyVersion = dep.version
                    }

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

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

                // List all dependencies and write to POM
                configurations.api.getAllDependencies().each cl
                configurations.implementation.getAllDependencies().each cl
            }

        }
    }
}




artifactory {
    contextUrl = repositoryPath

    publish {
        repository {
            repoKey = repositoryName
            username = repositoryUserName
            password = repositoryPassword
            maven = true
        }

        defaults {
            publications('aar')
            publishArtifacts = true

            // Publish generated POM files to Artifactory (true by default)
        }
    }
}

在子模块中使用该文件,每个模块都有自己的名称:

代码语言:javascript
复制
project.ext {
    name = "module-1"
    fileExtension = "aar"
}

apply plugin: 'com.android.library'
apply from: "../artifactory/release.gradle"

我应该在每次发布前强制清除任务和重建任务吗?或者我应该尝试在主gradle文件中为每个模块设置一个入口点?

EN

回答 1

Stack Overflow用户

发布于 2020-11-25 17:48:13

这个问题应该已经在Gradle Artifactory plugin 4.18.0中解决了。

您可以在此处找到有关此问题的更多信息:https://github.com/jfrog/build-info/issues/383

请升级您的Gradle Artifactory插件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65000131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档