Заменить зависимость gradle локальным клоном

#java #gradle

#java #градация

Вопрос:

У меня есть проект Java, управляемый с помощью gradle, с удаленной зависимостью, разрешенной через репозиторий.

 implementation 'org.company:very-big-dependency:2.7.1'
 

Я хочу клонировать эту зависимость, поработать над локальным проектом и внедрить новую функцию.

Есть ли способ заставить gradle захватить зависимость от local, как это было сделано из репозитория?

Я попытался включить проект в свой settings.gradle

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

и определил зависимость от моего build.gradle

 dependencies {
    ...
    implementation project(':very-big-dependency')
 

но когда я запускаю build gradle, он жалуется, что не может найти подпроект зависимости

 A problem occurred evaluating script.
> Project with path ':sub-project' could not be found in project
 

Поскольку проект был собран правильно, когда он был разрешен через репозиторий, это говорит мне о том, что gradle ведет себя по-другому при создании локального проекта.

Проект зависимости строится правильно при вызове собственного сценария сборки на локальном клоне, тесты проходят, и все в порядке.

Есть ли что-нибудь еще, что мне нужно рассказать gradle в моем проекте? Нужно ли мне делать что-то еще с локальной зависимостью? Нужно ли мне создавать jar каждый раз, когда я хочу это протестировать?

Примечания:

  • Никакая среда 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.
 
  • Я пытался добавить flatDir в repositories , но это ни к чему не привело.

Комментарии:

1. Этот вопрос серьезно нуждается в четком и рабочем ответе

Ответ №1:

Вы могли бы попробовать includeBuild dependencySubstitution in settings.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')
    }
}
 

Дополнительную информацию см. в руководстве.

Комментарии:

1. Правильно ли задан у вас путь? вы проверили руководство для получения дополнительной информации?

2. пришлось изменить его на with project(':') .