【问题标题】:How to remove a dependency from the pom when publishing in mavenCentral在 mavenCentral 中发布时如何从 pom 中删除依赖项
【发布时间】:2017-02-15 23:46:03
【问题描述】:

我正在尝试在 MavenCentral 中发布一个库。所以我关注了这个Chris Banes post

一切正常,但我有一个小问题:图书馆使用谷歌播放服务库:

compile 'com.google.android.gms:play-services:10.2.0'

但我不需要依赖项,它只是可选的,如果使用我的应用程序的开发人员还将播放服务添加到他的依赖项中,我想检测它并使用一些类。但是如果开发人员没有添加这个依赖项,我检测到这些类丢失并且我不使用它们。

所以基本上我想使用依赖项来编译构建,但我不希望 POM 文件添加这个依赖项。我该怎么做?

【问题讨论】:

    标签: java android gradle


    【解决方案1】:

    Maven plugin doc,您可以使用pom.whenConfigured 重新组织依赖关系。

    例如,以下不会将junit & play-services artifactId 作为依赖项:

    whenConfigured {
        p - >
            p.dependencies = p.dependencies.findAll {
                dep - > (dep.artifactId.notIn(["junit", "play-services"]))
            }
    }
    

    在您的示例中,您将有以下排除 play-services

    pom {
    
        project {
            name POM_NAME
            packaging POM_PACKAGING
            description POM_DESCRIPTION
            url POM_URL
    
            scm {
                url POM_SCM_URL
                connection POM_SCM_CONNECTION
                developerConnection POM_SCM_DEV_CONNECTION
            }
    
            licenses {
                license {
                    name POM_LICENCE_NAME
                    url POM_LICENCE_URL
                    distribution POM_LICENCE_DIST
                }
            }
    
            developers {
                developer {
                    id POM_DEVELOPER_ID
                    name POM_DEVELOPER_NAME
                }
            }
        }
    
        whenConfigured {
            p - >
                p.dependencies = p.dependencies.findAll {
                    dep - > (dep.artifactId.notIn(["play-services"]))
                }
        }
    }
    
    //https://stackoverflow.com/a/26810828/2614364
    Object.metaClass.notIn = { Object collection ->
        !(delegate in collection)
    }
    

    您也可以排除为dep.groupIddep.version

    【讨论】:

    • 感谢您的快速答复。我对 gradle 和 groovy 的经验都不是很丰富,在 Chris Banes 示例中,我该把这段代码放在哪里?如果我尝试将它放在 maven-push.gradle 文件中,它会以格式抱怨
    • 如果您将build.gradle 中的pom.project 替换为我帖子中的pom 对象,是否有效?
    • 好吧,我已经成功了,基本上在mavenDeployer{} 中添加了这一行pom.whenConfigured { pom -> pom.dependencies=[] } 以避免发布我的项目的依赖项。非常感谢
    • 很高兴它对你有用,我用它从 MavenCentral pom 中删除单元测试库依赖项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2017-12-31
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多