¿Es obligatorio el uso de gradlew para que funcione el IC travis?

Estoy intentando configurar CI para un proyecto en el que estoy trabajando, y me pregunto si realmente tenemos que enviar los gradlew y / o gradle.bat para que funcione.

¿Hay alguna solución para esto o la única manera de hacerlo es enviar esos files?

gradlew es obligatorio comprometer el script gradlew para build un proyecto Gradle en Travis CI.

Probablemente la mejor alternativa es usar el Gradle preinstalado para instalar un contenedor Gradle. Así es como se ve un build.gradle simple:

 apply plugin: 'java' check.doFirst { println "Running gradle v${project.gradle.gradleVersion}" } task wrapper(type: Wrapper) { gradleVersion = '3.4.1' } 

Si usa este file de compilation con el descriptor Travis estándar, no funcionará. Simplemente usará gradle para ejecutar su compilation. Sin embargo, si agrega la tarea contenedora al descriptor:

 language: java jdk: - oraclejdk8 before_install: gradle wrapper 

Travis ejecutará la tarea contenedora primero y luego detectará correctamente que gradlew está presente y lo usará para ejecutar su compilation.

Sin embargo, este enfoque tiene una desventaja que puede romper su construcción. Si usa algunas funciones en Gradle que se implementaron después de la versión de Gradle preinstalada, el paso de gradle wrapper fallará. Ejemplo de tal característica es el repository S3 maven, que se introdujo en v2.4, creo.

Para evitar esto, puede mover la tarea contenedora a un file de compilation separado, digamos wrapper.gradle :

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

Y cambie el file .travis.yml a:

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

Esto debería hacerlo. Esta configuration utiliza el Gradle preinstalado para instalar el contenedor sin cambiar el script de compilation principal.

Puede ver una compilation de ejemplo aquí y este es el repository completo de GitHub .


Nota: hay otra manera. Puede usar el paso before_install para instalar la versión de Gradle requerida desde una distribución descargable o tal vez utilizando el sistema de package Debian. Sin embargo, eso necesitaría privilegios sudo . Esas máquinas virtuales tardan mucho en comenzar (alnetworkingedor de 30 s?).

Otra cosa, lo mencioné en un comentario sobre otra respuesta, si cometes el script de gradlew , también necesitas el contenedor y las properties. El file jar es un file binary y ponerlo en control de versiones a veces se considera controvertido. Entonces, si usa la solución descrita anteriormente, también puede omitir la gradle carpeta gradle .

No es obligatorio porque ya está preinstalado para proyectos de Java y Android.

Sin embargo, es la forma recomendada de hacerlo porque la versión instalada depende de la date en que se creó la máquina virtual, probablemente desactualizada.

Puedes probarlo y verificar la versión con el command gradle --version .


Actualización # 1

Demostré que mi respuesta es correcta bifurcando su MaterialSearchView :

La versión 2.2.1 de Gradle ya está preinstalada, por lo que la envoltura de Gradle no es obligatoria, pero es la manera recomendada de hacerlo porque su proyecto requiere la versión 2.14.1.

 script: - gradle clean build 

También demuestro que la respuesta seleccionada como correcta se basa en una suposition errónea. Intenta usar un file innecesario y romper una compilation no hace que este file sea obligatorio, solo que no lo uses y elimines la línea chmod.

enter image description here

Puede verificar aquí la versión de Gradle necesaria para cada versión de complemento de Gradle; en su caso, la versión 2.2.3 del complemento necesita Gradle 2.14.1+

Sí, estos files son obligatorios

Lo determiné con un poco de testing y error. Los borré de una sucursal en uno de mis proyectos personales y los llevé a GitHub, y la compilation travis falló.

Si tiene curiosidad por el aspecto del logging, verifique esta idea .

Como puede ver cerca de la parte inferior, este es el error de falla:

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

Edición menor: Intenté usarlo con el file gradlew pero no con el file gradlew.bat. Esto funcionó para una limpieza / compilation simple, pero cuando Travis intentó iniciar un emulador, colgó por más de 10 minutos.

TL; DR usa ambos files.