Cache gradle зависимости, Travis CI
Я пытаюсь кэшировать зависимости для частного репозитория CSR Travis, имеет ли Travis некоторый механизм, специфичный для gradle, или мне нужно кэшировать определенные каталоги?
.travis.yml:
language: groovy
jdk:
- openjdk7
env:
- TERM=dumb
before_install:
- cd application
- chmod +x gradlew
script:
- ./gradlew build
Соответствующие части последней рабочей сборки:
Downloading https://services.gradle.org/distributions/gradle-2.1-bin.zip
......................................................................................................................................................................................
Unzipping /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a/gradle-2.1-bin.zip to /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a
Set executable permissions for: /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a/gradle-2.1/bin/gradle
Download https://jcenter.bintray.com/com/mycila/xmltool/xmltool/3.3/xmltool-3.3.pom
...
Добавил бы:
cache:
directories:
- $HOME/.gradle
работать? или возможно:
cache:
directories:
- $HOME/.gradle/caches/modules-2/files-2.1
Ответы
Ответ 1
Вам нужно будет кэшировать не менее ~/.gradle/wrapper
и ~/.gradle/caches
, но я, вероятно, начну с ~/.gradle
. (При необходимости местоположение последнего можно изменить, установив переменную среды GRADLE_USER_HOME
). При обновлении до более новой версии Gradle структура кэша может измениться, поэтому имеет смысл время от времени отбрасывать кеш-память.
PS: Пожалуйста, не делайте двойную запись здесь и на форумах Gradle (либо в порядке).
Ответ 2
Добавьте это в свой .travis.yml
:
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
Он документирован в документации Travis по адресу https://docs.travis-ci.com/user/languages/java/#Projects-Using-Gradle
Ответ 3
Вероятно, вы должны добавить sudo: false
в свой .travis.yml
, потому что кэширование недоступно для публичных репозиториев. Это предотвратит использование sudo
, setid
, setgid
, но позволяет механизм кэширования!
Но я обнаружил, что кеширование $HOME/.gradle/caches
не очень хороший вариант, потому что файл $HOME/.gradle/caches/modules-2/modules-2.lock
изменяется каждый сбор, поэтому Travis будет перепаковывать кеш каждый раз и делать полную загрузку этого кеша. Это медленнее для меня, чем загрузка всех моих зависимостей. Так что, возможно, лучше указать что-то еще, чем $HOME/.gradle/caches
.
Ответ 4
Я просто добавил следующие папки:
- $HOME/.gradle/wrapper
- $HOME/.gradle/native
- $HOME/.gradle/daemon
- $HOME/.gradle/caches/jars-1
- $HOME/.gradle/caches/2.3
Добавление .gradle/caches создаст новый файл кэша для каждой сборки.
Не забудьте изменить 2.3 на версию gradle.
Ответ 5
Вам просто нужно добавить строки ниже в ваш .travis.yml:
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
Вы можете получить дополнительную информацию здесь.
Ответ 6
С версии 3.5.1
самым простым и эффективным способом является просто кэширование каталога caches/modules-2
и caches/wrapper
. Кэширование целого каталога caches
добавляет слишком много файлов и вызывает большую задержку. Вам все равно нужно удалить файл modules-2.lock
.
before_cache:
- rm -rf $HOME/.gradle/caches/modules-2/modules-2.lock
cache:
- $HOME/.gradle/caches/modules-2
- $HOME/.gradle/wrapper/