在 mavenCentral 中发布时如何从 pom 中删除依赖项

Add*_*dev 5 java android gradle

我正在尝试在 MavenCentral 中发布一个库。所以我正在关注Chris Banes 的这篇文章

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

compile 'com.google.android.gms:play-services:10.2.0'
Run Code Online (Sandbox Code Playgroud)

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

所以基本上我想使用依赖项来编译构建,但我不希望 POM 文件添加此依赖项。我怎样才能做到这一点?

Ber*_*tel 2

Maven 插件文档中,您可以用来pom.whenConfigured重新组织依赖项。

例如,以下内容不会将junit& play-servicesartifactId 作为依赖项:

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

在您的示例中,您将排除以下内容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"]))
            }
    }
}

///sf/answers/1876757991/
Object.metaClass.notIn = { Object collection ->
    !(delegate in collection)
}
Run Code Online (Sandbox Code Playgroud)

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