java - Gradle 传递存储库和凭据

标签 java android maven gradle bintray

现状

我有多个使用 JFrog Bintray 的 Android 插件。这些都位于不同的 ma​​ven 存储库中。所有这些都是私有(private)存储库,因此在解决这些依赖关系之前需要进行身份验证。有内部开发的项目A项目B,还有第三方开发的项目C,需要实现项目 B 作为依赖项,它又依赖于 项目 A。对于项目A,将有一个bintray 用户1,它被授予项目A 的权限。还将有一个 bintray 用户 2 供第三方对 项目 B 进行身份验证。

project B 中存在对 project A 的依赖,如下所示:

repositories {
    jcenter()

    maven {
        credentials {
            username = 'bintrayUser1'
            password = 'bintrayAPIKeyForUser1'
        }
        url  "https://url-to-projectA"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:A:1.0.0'
}

现在有另一个项目C,它依赖于项目B,如下所示:

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://link-to-projectB"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:B:1.0.0'
}

问题

出现的问题是要求bintray 用户2 告诉项目C 项目A 在哪里并且需要对其进行身份验证。我想知道 bintray user 2 是否有可能不需要告诉 Project C Project A 所在的位置,而是将其从项目 B

身份验证也是如此。 bintray 用户 2 是否可以从 bintray 用户 1Project A 复制身份验证?

非首选方案

现在我可以做的是让 project C 也告诉 project B 中每个依赖项的位置,但这不能很好地扩展。这将是我将放入项目 B项目 C 的每个私有(private)依赖项都需要定位并需要身份验证。它看起来像这样:

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://link-to-projectA"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectB"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
        maven {
            url "https://link-to-projectX"
            credentials {
                username = 'bintrayUser2'
                password = 'bintrayAPIKeyForUser2'
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.project:B:1.0.0'
}

这将变得难以管理,并且您可能不想授予 bintray user 2 权限。

那么,有没有办法复制依赖位置和授权?

最佳答案

您必须使用“非首选解决方案”。

当 Gradle 构建 projectC 时,它会从 Maven 中下载依赖项 compile 'com.project:B:1.0.0'

对于依赖项,它还会下载包含嵌套依赖项 com.project:A:1.0.0 的 pom 文件。然后它会尝试从您在 projectC/build.gradle(或顶层)中添加的存储库下载依赖项。
此时gradle 不使用 projectB/build.gradle,只使用pom文件。

这意味着 gradle 无法知道凭据 来下载依赖项而不将它们添加到 projectC/build.gradle 文件中。

关于java - Gradle 传递存储库和凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38117765/

相关文章:

java - BufferedWriter自动刷新

java - Android中项目的自定义ListView点击问题

android - 为 Android 中的图库项目添加阴影?

Android 导航组件 - 设置 HasOptionsMenu 会使 NavigateUp 按钮无效

Java 9 的 Maven 编译问题

java - 分发 glassfish 服务器应用程序

java - Gradle构建错误

java - Apache Tomcat - 来回流

java - 应用程序状态下降,当 mongo 因 spring boot actuator 而下降时

java - Spring MVC 模型绑定(bind)不适用于非公共(public)成员