Решение проблем с кешем gradle со снимками?

#maven #gradle

#maven #gradle

Вопрос:

При публикации снимков в artifactory / mavenLocal проекты не получат последний снимок. Для этого требуется удалить jar из ~/.gradle/cache

В Maven есть функция установки временных меток для моментальных снимков. как это будет работать с кешем gradle?

Ответ №1:

При решении вашей проблемы следует учитывать две вещи:

  1. Как Gradle обрабатывает / распознает моментальные снимки
  2. Как переопределить поведение Gradle по умолчанию

Некоторые сведения о том, как Gradle распознает / обрабатывает моментальные снимки

По умолчанию Gradle обновляет зависимость от моментального снимка каждые 24 часа.

Gradle автоматически распознает зависимость как моментальный снимок, если версия заканчивается -SNAPSHOT суффиксом. Например:

 dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1.0-SNAPSHOT"
}
  

Однако, если строка версии зависимости не заканчивается на -SNAPSHOT Gradle, необходимо сообщить, что это снимок с changing параметром. Например:

 dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1.0", changing: true
}
  

Переопределение того, как часто Gradle загружает моментальные снимки

Единственный механизм переопределения 24-часовой политики по умолчанию — настроить Gradle на более частое аннулирование кэша зависимостей (и, следовательно, загрузку нового СНИМКА). Например:

 configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
  

Кеш зависимостей с динамически изменяемой версией необходимо будет настроить отдельно

Если вы используете какие-либо динамические версии, такие как:

 dependencies {
    compile group: "aGroup", name: "anArtifact", version: "1. ", changing: true
}
  

Вам нужно будет настроить недействительность кэша для этих зависимостей отдельно, например:

 configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
}
  

Влияние на производительность сборки

Следует отметить, что чем короче период времени, в течение которого кэшируется зависимость, тем чаще Gradle будет извлекать этот артефакт. Если кэширование полностью отключено, оно будет захватывать зависимость во время каждого выполнения.

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

1. почему cacheChangingModulesFor и cacheDynamicVersionsДля обоих необходимы? есть ли какая-либо разница между ними.