与maven部署者的Gradle依赖性解决策略

时间:2017-09-06 08:09:52

标签: gradle android-gradle mavendeployer

我正在开发一个Android项目。我们使用DependencyResoultionStrategy来交换一些依赖版本。代码如下所示:

resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    final version = getVersionForDependency(project, details.requested.group, details.requested.name)
    if (version != null) {
        details.useVersion(version)
    }
}

因此,例如,项目请求依赖项group:name:1.1.2,但它被交换,因此使用了依赖项group:name:1.2.0。这非常有效,项目是使用正确的依赖(第二个)构建的。

我们还有一个publish任务,它将项目部署到本地maven存储库。我们使用maven插件,代码如下:

apply plugin: 'maven'

task publish(dependsOn: uploadArchives)

uploadArchives {
    configurations {
        deployerFTP
    }
    repositories {
        mavenDeployer {
            configuration = configurations.deployerFTP
            repository(URL) {
                authentication(USERNAME, PASSWORD)
            }
        }
    }
    dependencies {
        deployerFTP "org.apache.maven.wagon:wagon-ftp:2.4"
    }
}

问题是,如果我在结果.pom文件中发布库,则输入依赖项group:name:1.1.2,而不是实际使用的那个。如何更改此行为,以便pom包含正确的依赖项?

1 个答案:

答案 0 :(得分:0)

我找到了答案,只需添加此代码块:

mavenDeployer {
    // ...
    pom.whenConfigured { pom ->
        pom.dependencies = pom.dependencies.collect { dep ->
            def version = getVersionForDependency(project, dep.groupId, dep.artifactId)
            if (version != null) {
                dep.version = version
            }
            return dep
        }
    }
}