Обязателен ли gradlew для работы travis CI?

5

Я пытаюсь настроить CI для проекта, над которым я работаю, и мне интересно, действительно ли нам нужно зафиксировать файлы gradlew и/или gradle.bat, чтобы заставить его работать.

Есть ли обходной путь для этого, или только для этого файлы?

  • 0
    рекомендуется, docs.gradle.org/current/userguide/…
  • 0
    Не знаю, единственный ли это способ, но так устроен мой репо.
Показать ещё 2 комментария
Теги:
gradle
travis-ci

3 ответа

4
Лучший ответ

Объявление gradlew script не является обязательным для создания проекта Gradle в Travis CI.

Вероятно, лучшей альтернативой является использование предварительно установленного Gradle для установки обертки Gradle. Вот как выглядит простая build.gradle:

apply plugin: 'java'

check.doFirst {
    println "Running gradle v${project.gradle.gradleVersion}"
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.4.1'
}

Если вы используете этот файл сборки со стандартным дескриптором Travis, это не сработает. Он просто будет использовать gradle для запуска вашей сборки. Однако, если вы добавили задачу оболочки в дескриптор:

language: java
jdk:
  - oraclejdk8
before_install:
  gradle wrapper

Сначала Travis запускает задачу оболочки, а затем корректно обнаруживает, что gradlew присутствует, и использовать его для запуска сборки.

Однако этот подход имеет недостаток, который может нарушить вашу сборку. Если вы используете некоторые функции в Gradle, которые были реализованы после предустановленной версии Gradle, шаг gradle wrapper завершится с ошибкой. Примером такой функции является репозиторий S3 maven, который был представлен в версии 2.4. Я полагаю.

Чтобы предотвратить это, вы можете перенести задачу оболочки в отдельный файл сборки, скажем wrapper.gradle:

task wrapper(type: Wrapper) {
    gradleVersion = '3.4.1'
}

И измените файл .travis.yml на:

language: java
jdk:
  - oraclejdk8
before_install:
  gradle -b wrapper.gradle wrapper

Это должно сделать это. Эта установка использует предварительно установленный Gradle для установки оболочки без изменения основной сборки script.

Вы можете увидеть пример сборки здесь и это весь репозиторий GitHub.


Примечание. Есть и другой способ. Вы можете использовать шаг before_install для установки требуемой версии Gradle из загружаемого дистрибутива или, возможно, с использованием системы пакетов Debian. Однако для этого нужны привилегии sudo. Такие виртуальные машины занимают много времени (около 30 секунд?).

Другое дело, я упомянул об этом в комментарии к другому ответу, если вы передаете gradlew script, вам также нужны баннеры и свойства оболочки. Банкомат представляет собой двоичный файл, и его включение в управление версиями иногда рассматривается как противоречивое. Поэтому, если вы используете решение, описанное выше, вы также можете опустить фиксацию папки gradle.

2

Это не обязательно, потому что он уже предустановлен для проектов Java и Android.

Однако, это рекомендуемый путь, потому что установленная версия зависела от даты создания виртуальной машины, вероятно, устаревшей.

Вы можете попробовать и проверить версию с помощью команды gradle --version.


Обновление # 1

Я продемонстрировал, что мой ответ правилен для вашего MaterialSearchView:

Gradle версия 2.2.1 уже предварительно установлена, поэтому обертка Gradle не является обязательной, но рекомендуется использовать ее, потому что для вашего проекта требуется версия 2.14.1.

script:
  - gradle clean build

Я также демонстрирую, что выбранный ответ правильный, основан на неправильном предположении. Попробуйте использовать ненужный файл и сломать сборку не делает этот файл обязательным, только не используйте его и не удаляйте строку chmod.

Изображение 460052

Вы можете проверить здесь требуемую версию Gradle для каждой версии плагина Gradle, в вашем случае для версии 2.2.3 для плагинов требуется Gradle 2.14.1 +

  • 2
    Важно добавить, что рекомендация касается не только сценариев. jar и properties должны быть переданы также. Многие люди не любят передавать бинарные файлы в систему контроля версий (вполне понятно).
0

Да, эти файлы необходимы.

Я определил это с небольшой проб и ошибок. Я удалил их из ветки в одном из моих личных проектов и подтолкнул их к GitHub, а сборка travis не удалась.

Если вам интересно, как выглядит журнал, проверить этот смысл.

Как вы можете видеть внизу, это ошибка:

chmod: cannot access `gradlew': No such file or directory
The command "chmod +x gradlew" failed and exited with 1 during .

Незначительное редактирование: я пытался использовать его с файлом gradlew, но не с файлом gradlew.bat. Это работало для простой очистки/сборки, но когда Трэвис попытался запустить эмулятор, он висел более 10 минут.

TL; DR используют оба файла.

  • 0
    Как кажется, это может быть не обязательно, если вы полностью контролируете свою среду CI, но, как и для Travis CI, это кажется обязательным. Спасибо за тест!
  • 0
    Нет проблем. Я сейчас тестирую с файлом gradlew, но без gradlew.bat и вскоре отредактирую свой ответ с результатами.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню