Я пытаюсь настроить CI для проекта, над которым я работаю, и мне интересно, действительно ли нам нужно зафиксировать файлы gradlew
и/или gradle.bat
, чтобы заставить его работать.
Есть ли обходной путь для этого, или только для этого файлы?
Объявление 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
.
Это не обязательно, потому что он уже предустановлен для проектов Java и Android.
Однако, это рекомендуемый путь, потому что установленная версия зависела от даты создания виртуальной машины, вероятно, устаревшей.
Вы можете попробовать и проверить версию с помощью команды gradle --version
.
Обновление # 1
Я продемонстрировал, что мой ответ правилен для вашего MaterialSearchView:
Gradle версия 2.2.1 уже предварительно установлена, поэтому обертка Gradle не является обязательной, но рекомендуется использовать ее, потому что для вашего проекта требуется версия 2.14.1.
script:
- gradle clean build
Я также демонстрирую, что выбранный ответ правильный, основан на неправильном предположении. Попробуйте использовать ненужный файл и сломать сборку не делает этот файл обязательным, только не используйте его и не удаляйте строку chmod.
Вы можете проверить здесь требуемую версию Gradle для каждой версии плагина Gradle, в вашем случае для версии 2.2.3 для плагинов требуется Gradle 2.14.1 +
jar
и properties
должны быть переданы также. Многие люди не любят передавать бинарные файлы в систему контроля версий (вполне понятно).
Да, эти файлы необходимы.
Я определил это с небольшой проб и ошибок. Я удалил их из ветки в одном из моих личных проектов и подтолкнул их к 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 используют оба файла.