我正在使用gradle,它的本地存储库位于\.gradle\caches\modules-2\files-2.1
,它包含所有下载的jar但不包含我的模块。是否有任何特定的地方我应该搜索它?
我需要它在settings.gradle
中,我有一个指定依赖路径,如:
include ':model'
project (':model').projectDir = new File(settingsDir, './model')
在一个新项目中。另外,我不想以这种方式提供路径,因为如果我在这个项目中有多个项目的依赖关系,那么提到路径将是困难和奇怪的。
如何从本地maven或gradle存储库中进行gradle搜索。
答案 0 :(得分:0)
我仍然不确定这里有什么问题,我怀疑对多项目构建的工作方式存在一些困惑。所以我打算尝试提供一个通用的答案。
您需要回答的第一个问题是,您是否对作为同一构建的一部分的项目之间的依赖关系感兴趣 - 如multi-project build的一部分 - 或者在单独的构建中。
项目依赖关系包含在user manual中,仅适用于多项目构建。他们使用逻辑路径,使用冒号作为“路径”分隔符,来指定目标模块的位置,如下所示:
dependencies {
implementation project(":model")
}
此时,Gradle需要知道文件系统中存在“:model”的位置。没有解决这个问题。您有几个选择:
遵循与逻辑路径结构匹配的目录结构惯例,即具有包含“:model”子项目的 MyBigProject / model 目录
在 settings.gradle 中指定“:model”的文件路径,例如project(":model").projectDir = new File(rootDir, "unusual/path/to/model")
自动发现项目
最常见的方法是第一种方法。第二种情况并不罕见,特别是如果你想将子项目放在一个单独的目录中,比如 subprojects - 这是Gradle本身的构建。我还没有看到最后一个选项完成,我不知道它是否会遇到问题。
为了完整起见,如果你使用类似的东西,你自担风险,这里有一个在 settings.gradle 文件中自动发现项目的例子:
rootDir.eachDir { File dir ->
if ("build.gradle" in dir.listFiles()*.name) {
include dir.name
}
}
此片段基本上在根项目文件夹中查找其中包含 build.gradle 文件的目录,并将它们添加为子项目。子项目的目录名称成为项目的名称。
它并不是特别聪明,你应该为构建文件使用不同的名称,但它可能会给你一些想法。
与项目依赖项一样,Gradle需要知道从何处获取指定模块的相应JAR或其他形式的工件。您通常会为此指定Maven Central或类似的东西,但还有其他有用但不太常见的选项:
将项目的工件复制到本地Maven存储库 - Maven Plugin和Maven Publish Plugin都支持此
使用 file:// URL发布到与Maven兼容的存储库,而不是HTTP / HTTPS,以保护您的项目免受Maven Local损坏
值得注意的是,Gradle支持composite builds,它允许您(有效地)从另一个构建中替换正常的依赖项。因此,如果 model 是单独构建的一部分,但是您拥有源代码并在本地构建,那么您可以进行更改并立即在另一个构建的项目中测试它们,而无需经历整个“安装”中间步骤,这是常见的在Maven世界(和Gradle预复合构建)。
希望这一切都有意义。