#maven #gradle
#maven #gradle
Вопрос:
При публикации снимков в artifactory / mavenLocal проекты не получат последний снимок. Для этого требуется удалить jar из ~/.gradle/cache
В Maven есть функция установки временных меток для моментальных снимков. как это будет работать с кешем gradle?
Ответ №1:
При решении вашей проблемы следует учитывать две вещи:
- Как Gradle обрабатывает / распознает моментальные снимки
- Как переопределить поведение 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Для обоих необходимы? есть ли какая-либо разница между ними.