将 gradle 依赖替换为本地克隆

wht*_*lnv 8 java gradle

我有一个 java 项目,使用 gradle 进行管理,并通过存储库解决了远程依赖关系。

implementation 'org.company:very-big-dependency:2.7.1'
Run Code Online (Sandbox Code Playgroud)

我想克隆该依赖项,处理本地项目并实现新功能。

有没有办法让 gradle 从本地获取依赖项,就像从存储库中获取依赖项一样?

我尝试过将该项目纳入我的settings.gradle

include ':app', ":very-big-dependency"
project(':very-big-dependency').projectDir = new File(settingsDir, '../../very-big-dependency')
Run Code Online (Sandbox Code Playgroud)

并定义了对我的依赖build.gradle

dependencies {
    ...
    implementation project(':very-big-dependency')
Run Code Online (Sandbox Code Playgroud)

但是当我运行buildgradle 时,它​​抱怨找不到依赖项的子项目

A problem occurred evaluating script.
> Project with path ':sub-project' could not be found in project
Run Code Online (Sandbox Code Playgroud)

由于项目在通过存储库解析时正确构建,这告诉我 gradle 在构建本地项目时的行为方式不同。

在本地克隆上调用其自己的构建脚本时,依赖项的项目可以正确构建,测试通过并且一切正常。

我的项目中还有什么需要告诉 gradle 的吗?我还需要对本地依赖项执行其他操作吗?每次我想测试这个时都需要构建一个罐子吗?

笔记:

  • 没有使用 IDE 来处理这个问题
  • 项目是通过创建的gradle init
  • 我尝试导入:sub-project,只是为了得到:
A problem occurred configuring project ':very-big-dependency'.
> Could not get unknown property 'compileJava' for project ':sub-project' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
  • 我尝试添加一个flatDirrepositories但没有结果。

mly*_*yko 5

你可以includeBuild尝试dependencySubstitutionsettings.gradle.

// include local clone of the library
includeBuild('../../very-big-dependency') {
    dependencySubstitution {
       // substitute remote dependency with local module
       substitute module('org.company:very-big-dependency') with project(':very-big-dependency')
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅手册了解更多信息。