出于某种原因,我的离岸团队无法从我的客户Artifactory下载工件(依赖关系),这是我们的组织依赖存储库。"刷新依赖关系"什么都不触发,并给出超时超时。我看到了我的" Gradle Dependencies"被下载到位置" D:/C813507/Gradle/gradle-1.11/bin/caches/modules-2/files-2.1 /"。我可以将此文件夹压缩并发送给他们吗?他们如何在gradle中实现指向其本地目录的内容。我的构建gradle具有以下行。如何在Windows操作系统中将URL指向本地目录
repositories {
maven {
url 'http://artifactory.myorg.com:8081/artifactory/plugins-release'
}
}
答案 0 :(得分:25)
如果您无法访问离岸团队,则可以将所需的所有依赖项jar复制到单个目录中,然后使用flatDir
存储库。
repositories {
flatDir {
dirs 'D:/path/to/local/directory'
}
}
dependencies {
compile name: 'name-of-jar'
}
不使用flatDir
存储库的另一种方法是:
dependencies {
compile files('/path/to/dir/something_local.jar')
}
答案 1 :(得分:14)
您可以声明一个本地flatDir
存储库,而不是配置maven
存储库,如下所示:
repositories {
maven {
url 'file://D:/path/to/local/directory'
}
}
正如 @Peter Niederwieser 所提到的,flatDir
存储库不支持传递依赖项解析。 maven
本地存储库可以。
答案 2 :(得分:3)
使用如下所示的flatDir是一种选择:
repositories {
flatDir {
dirs 'D:/path/to/local/directory'
}
}
这有效。但是,如果有mavenCentral()或其他包含相同JAR的Maven存储库,则将优先于FlatDir优先于Maven存储库。
摘自Gradle文档:https://docs.gradle.org/current/userguide/repository_types.html
Gradle将动态生成模块描述符(不包含任何 依赖项信息)。然而, 因为Gradle倾向于使用已创建描述符的模块 从真实的元数据而不是生成的平面目录 存储库不能用于覆盖具有真实元数据的工件 来自其他存储库。例如,如果Gradle仅找到 平面目录存储库中的jmxri-1.2.1.jar,而jmxri-1.2.1.pom位于 另一个支持元数据的存储库,它将使用第二个 存储库以提供模块。
所以flatDir不好。我们应该使用第二个答案中提到的本地Maven存储库。但是第二个答案有几个问题
我们可以使用以下解决方案来解决这些问题:
gradle build
而不会遇到任何问题)repositories {
maven {
url uri("${projectDir}/libs")
}
mavenLocal()
<All your Repos here>
mavenCentral()
}
这样,您可以确保即使其他仓库中也存在JAR,也只能从本地目录中选择该JAR,并且该解决方案也可以移植。