Зависимость компиляции gradle по требованию, в противном случае используйте jar

Меня интересует использование gradle в многомодульном проекте. Я могу повторно использовать этот вопрос. Вложенные в Gradle мульти-проекты с зависимостями компиляции проекта, а также проиллюстрировать их зависимости.

 Root
  |__ P1
  |   |_ PP1
  |   |_ PP2
  |
  |__ P2
     |_PP3
     |_PP4

Как и в первоначальном вопросе, я хочу скомпилировать PP1 - но я только по требованию, в противном случае я хочу использовать последнюю сборку jar-зависимость.

dependencies {
    compile(project(":P1:PP1"))
}

Так что в идеале я хочу что-то вроде

dependencies {
    compile(compileFromSourceCodeOrLoadJar(project(":P1:PP1"), 'P1:PP1'))
}

где он будет скомпилирован, если исходные файлы в каталоге PP1 новее, чем последний собранный jar. Идея состоит в том, чтобы скомпилировать, только если это строго необходимо. Решение может быть принято из последних измененных временных меток исходных файлов против файла JAR.

Чтобы сделать его еще более сложным и потенциально эффективным, решение должно быть принято на основе выходных данных системы контроля версий - если есть какие-либо изменения со времени X или ревизии R - тогда извлекайте и компилируйте; в противном случае используйте зависимость jar.

Кто-нибудь решил эту проблему? Я думаю, что это может быть решено с помощью пользовательского плагина gradle/groovy, но кто-то, должно быть, уже решил это?

Благодарю.

1 ответ

Планируется, что Gradle будет поддерживать распределенный кэш сборок, но он пока недоступен. Реализация этого хорошо, не касаясь кодовой базы Gradle, вероятно, будет трудной (я не знаю ни о каких таких усилиях). Регулярное репозиторий Maven/Ivy, возможно, не лучшее место для хранения результатов кэшированной сборки.

Другие вопросы по тегам