Gradle搜索本地maven或gradle存储库

时间:2018-04-12 11:30:37

标签: gradle

我正在使用gradle,它的本地存储库位于\.gradle\caches\modules-2\files-2.1,它包含所有下载的jar但不包含我的模块。是否有任何特定的地方我应该搜索它?

我需要它在settings.gradle中,我有一个指定依赖路径,如:

include ':model'
project (':model').projectDir = new File(settingsDir, './model')

在一个新项目中。另外,我不想以这种方式提供路径,因为如果我在这个项目中有多个项目的依赖关系,那么提到路径将是困难和奇怪的。

如何从本地maven或gradle存储库中进行gradle搜索。

1 个答案:

答案 0 :(得分:0)

我仍然不确定这里有什么问题,我怀疑对多项目构建的工作方式存在一些困惑。所以我打算尝试提供一个通用的答案。

您需要回答的第一个问题是,您是否对作为同一构建的一部分的项目之间的依赖关系感兴趣 - 如multi-project build的一部分 - 或者在单独的构建中。

项目依赖项(多项目构建)

项目依赖关系包含在user manual中,仅适用于多项目构建。他们使用逻辑路径,使用冒号作为“路径”分隔符,来指定目标模块的位置,如下所示:

dependencies {
    implementation project(":model")
}

此时,Gradle需要知道文件系统中存在“:model”的位置。没有解决这个问题。您有几个选择:

  1. 遵循与逻辑路径结构匹配的目录结构惯例,即具有包含“:model”子项目的 MyBigProject / model 目录

  2. settings.gradle 中指定“:model”的文件路径,例如project(":model").projectDir = new File(rootDir, "unusual/path/to/model")

  3. 自动发现项目

  4. 最常见的方法是第一种方法。第二种情况并不罕见,特别是如果你想将子项目放在一个单独的目录中,比如 subprojects - 这是Gradle本身的构建。我还没有看到最后一个选项完成,我不知道它是否会遇到问题。

    为了完整起见,如果你使用类似的东西,你自担风险,这里有一个在 settings.gradle 文件中自动发现项目的例子:

    rootDir.eachDir { File dir ->
        if ("build.gradle" in dir.listFiles()*.name) {
            include dir.name
        }
    }
    

    此片段基本上在根项目文件夹中查找其中包含 build.gradle 文件的目录,并将它们添加为子项目。子项目的目录名称成为项目的名称。

    它并不是特别聪明,你应该为构建文件使用不同的名称,但它可能会给你一些想法。

    非项目依赖项

    与项目依赖项一样,Gradle需要知道从何处获取指定模块的相应JAR或其他形式的工件。您通常会为此指定Maven Central或类似的东西,但还有其他有用但不太常见的选项:

    1. 将项目的工件复制到本地Maven存储库 - Maven PluginMaven Publish Plugin都支持此

    2. 使用 file:// URL发布到与Maven兼容的存储库,而不是HTTP / HTTPS,以保护您的项目免受Maven Local损坏

    3. 值得注意的是,Gradle支持composite builds,它允许您(有效地)从另一个构建中替换正常的依赖项。因此,如果 model 是单独构建的一部分,但是您拥有源代码并在本地构建,那么您可以进行更改并立即在另一个构建的项目中测试它们,而无需经历整个“安装”中间步骤,这是常见的在Maven世界(和Gradle预复合构建)。

      希望这一切都有意义。