在Android库项目中为AAR工件指定已部署的文件名

在Android库项目中为AAR工件指定已部署的文件名,第1张

概述我正在尝试配置 Android库项目以将多个工件部署到本地托管的Maven存储库.我已经足够远,以至于两个工件都生成了自己的POM,并且使用以下脚本将其正确部署到repo: android { // Publish both debug and release publishNonDefault true}uploadArchives { repositories.m 我正在尝试配置 Android库项目以将多个工件部署到本地托管的Maven存储库.我已经足够远,以至于两个工件都生成了自己的POM,并且使用以下脚本将其正确部署到repo:

androID {    // Publish both deBUG and release    publishNonDefault true}uploadArchives {    repositorIEs.mavendeployer {        def majorVersion = 1        def minorVersion = 1        def buildVersion = project.propertIEs.get('RELEASE','0').toInteger()        addFilter('release') { artifact,file ->            file.name.contains('release')        }        addFilter('deBUG') { artifact,file ->            file.name.contains('deBUG')        }        activePomFilters.each { filter ->            pom(filter.name) {                groupID = 'com.redacted'                artifactID = 'redacted'                packaging = 'aar'                version = "${majorVersion}.${minorVersion}.${buildVersion}"                if (!project.hasProperty('RELEASE')) {                    version += "-SNAPSHOT"                }                if (filter.name == 'deBUG') {                    artifactID += '-deBUG'                }            }        }    }}

预期交付是:

com/    redacted/        redacted/            1.1.0-SNAPSHOT/        redacted-deBUG/            1.1.0-SNAPSHOT/

这是按预期发生的,但它似乎发布了带有额外后缀的工件(它打破了依赖项发现),我无法弄清楚它来自何处或如何更改它.我看到的是:

com/redacted/redacted/1.1.0-SNAPSHOT/    redacted-1.1.0-20150717.213849-1-release.aar    redacted-1.1.0-20150717.213849-1-release.aar.md5    redacted-1.1.0-20150717.213849-1-release.aar.sha1    redacted-1.1.0-20150717.213849-1.pom    redacted-1.1.0-20150717.213849-1.pom.md5    redacted-1.1.0-20150717.213849-1.pom.sha1

出于某种原因,它将日期以及–release后缀附加到仅与AAR相关的文件,而不是POM文件.如果我手动重命名这些文件,一切都按预期工作.例如,这是我期望输出的内容:

com/redacted/redacted/1.1.0-SNAPSHOT/    redacted-1.1.0-20150717.213849-1.aar    redacted-1.1.0-20150717.213849-1.aar.md5    redacted-1.1.0-20150717.213849-1.aar.sha1    redacted-1.1.0-20150717.213849-1.pom    redacted-1.1.0-20150717.213849-1.pom.md5    redacted-1.1.0-20150717.213849-1.pom.sha1

如何更改这些文件的传送方式?

解决方法 你遇到的是这个(强调我的):

important: When enabling publishing of non default,the Maven publishing plugin will publish these additional variants as extra packages (with classifIEr). This means that this is not really compatible with publishing to a maven repository. You should either publish a single variant to a repository OR enable all config publishing for inter-project dependencIEs.

请参阅文档:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication

您看到的后缀释放和调试是通过启用非默认工件的发布而引入的分类器. < artifact> build / ivy.xml中的元素(用作Maven配置的基础)包含这些分类器.

迭代配置中的工件并删除分类器不起作用.虽然允许设置分类器,但保留其原始值.

但是,包装原始工件的工作原理是什么.对于分类器,包装器将始终返回null.这确实导致发布和调试工件具有相同的完全限定ID(=名称分类器),这导致仅发布一个工件.这可以通过使用调试工件的不同名称来修复:

class UnclassifIEdPublishArtifact implements PublishArtifact {    private PublishArtifact delegatee;    private boolean isDeBUGArtifact;    UnclassifIEdPublishArtifact(PublishArtifact delegatee,isDeBUGArtifact) {        this.delegatee = delegatee        this.isDeBUGArtifact = isDeBUGArtifact    }    @OverrIDe    String getname() {        return delegatee.name + (isDeBUGArtifact ? '-deBUG' : '')    }    @OverrIDe    String getExtension() {        return delegatee.extension    }    @OverrIDe    String getType() {        return delegatee.type    }    @OverrIDe    String getClassifIEr() {        return null    }    @OverrIDe    file getfile() {        return delegatee.file    }    @OverrIDe    Date getDate() {        return delegatee.date    }    @OverrIDe    TaskDependency getBuildDependencIEs() {        return delegatee.buildDependencIEs    }}project.afterEvaluate {    configurations.each { configuration ->        def artifacts = configuration.artifacts        if (!artifacts.isEmpty()) {            def unclassifIEdArtifacts = []            unclassifIEdArtifacts.addAll(artifacts.collect { classifIEdArtifact ->                new UnclassifIEdPublishArtifact(classifIEdArtifact,classifIEdArtifact.classifIEr == 'deBUG')            })            artifacts.clear()            artifacts.addAll(unclassifIEdArtifacts)        }    }}

我无法从文档中了解项目依赖性的后果,因此您应该检查这些是否仍然有效.

总结

以上是内存溢出为你收集整理的在Android库项目中为AAR工件指定已部署的文件名全部内容,希望文章能够帮你解决在Android库项目中为AAR工件指定已部署的文件名所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1127870.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存