如何使Gradle存储库指向本地目录

Vin*_*jan 18 gradle maven build.gradle

出于某种原因,我的离岸团队是不是能够从我的客户Artifactory的这是我们组织的依赖库下载工件(依赖)."刷新依赖"触发什么,并给出TIME OUT例外.我看到了,我的"摇篮相关性"被下载到位置"d:/C813507/Gradle/gradle-1.11/bin/caches/modules-2/files-2.1/".我可以将此文件夹压缩并发送给他们吗?他们如何在gradle中实现指向其本地目录的内容.我的构建gradle具有以下行.如何将URL指向Windows操作系统中的本地目录

repositories {
         maven {
            url 'http://artifactory.myorg.com:8081/artifactory/plugins-release'
        }

}
Run Code Online (Sandbox Code Playgroud)

die*_*end 27

如果您无法访问离岸团队,则可以将所需的所有依赖项jar复制到单个目录中,然后使用flatDir存储库.

repositories {
   flatDir {
       dirs 'D:/path/to/local/directory'
   }
}


dependencies {
   compile name: 'name-of-jar'
}
Run Code Online (Sandbox Code Playgroud)

不使用flatDir存储库的另一种方法是:

dependencies {
    compile files('/path/to/dir/something_local.jar')
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于flatDir存储库,不存在传递依赖性解析.最好调查并修复原始问题. (5认同)

Ale*_*pov 21

flatDir您可以maven按如下方式声明本地存储库,而不是配置存储库:

repositories {
   maven {
       url 'file://D:/path/to/local/directory'
   }
}
Run Code Online (Sandbox Code Playgroud)

正如@Peter Niederwieser所提到的,flatDir存储库不支持传递依赖性解析.maven本地存储库.

  • 真正.但是,OP明确表示他正在寻找**本地目录**解决方案,因此您的评论在此上下文中无关紧要. (9认同)
  • @user3118604 我需要一组通过依赖关系相互关联的插件工件,因此 flatDir 不是一个选项。我将这组插件放入我的项目中,并通过 `maven(url = uri("file://${projectDir}/3rdParty/"))` 引用它。`${projectDir}` 使其独立于系统。 (5认同)
  • 这不适用于不同的环境(特别是在 CI 服务器上),并且违反了“构建过程在任何地方都应该相同”的原则 (2认同)

mk.*_*k.. 12

使用如下所示的 flatDir 是一种选择:

repositories {
   flatDir {
       dirs 'D:/path/to/local/directory'
   }
}
Run Code Online (Sandbox Code Playgroud)

这有效。但是如果存在 mavenCentral() 或其他包含相同 JAR 的 maven 存储库,则 maven 存储库将优先于 flatDir。

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 存储库。但是第二个答案有几个问题

  1. 不便携
  2. 如果该工件也存在于全局存储库中,则不清楚从何处提取它。

我们可以通过使用如下解决方案来解决这些问题:

  1. 在项目目录下创建一个名为libs的文件夹
  2. 将您的工件复制到这个 libs 目录中(如果您使用的是 git 或任何其他 scm,请确保分发这个 libs fodler,以便其他人可以gradle build没有任何问题)
  3. 在列出任何其他存储库之前,向您的 libs 目录声明一个 Maven 存储库并调用 mavenLocal()。这一步非常重要,以确保从本地目录而不是从其他全局存储库中选择 jar
repositories {
   maven {
       url uri("${projectDir}/libs")
   }

   mavenLocal()
   <All your Repos here>
   mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以确保即使 JAR 存在于其他存储库中,它也只会从您的本地目录中选取,并且该解决方案也是可移植的。