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/