¿Tarea de Gradle Zip para hacer varios subárboles?

Estamos tratando de crear un archivo Zip ligeramente complicado en Gradle a partir de varios árboles de origen del sistema de archivos, pero no importa cuántos into especificaciones que damos, todo los pone en el mismo. ¿Es esto posible hacer en Gradle?

build/libs/foo.jar --> foo.jar
bar/*              --> bar/*

En su lugar, obtenemos esto:

build/libs/foo.jar --> bar/foo.jar
bar/*              --> bar/*

Usando esto:

task installZip(type: Zip, dependsOn: jar) {
    from('build/libs/foo.jar').into('.')
    from('bar').into('bar')
}

Cualquier ayuda sería apreciada.

EDITAR: Gradle 1.0-milestone-3

preguntado el 16 de mayo de 11 a las 19:05

3 Respuestas

Prueba esto:

task zip(type: Zip) {
    from jar.outputs.files
    from('bar/') {
        into('bar')
    }
}

Primero ... el frasco debe estar en la raíz / del zip (que parece ser lo que quieres). En segundo lugar, al especificar el desde jar.outputs.files, hay un implícito dependsOn en la tarea del tarro, por lo que esto muestra otra forma de lograr lo que desea. Excepto con este enfoque, si el nombre del jar cambia con el tiempo, no importa. Avísame si necesitas ayuda adicional.

Respondido 16 Abr '15, 18:04

No conocía ese método para extraer el archivo Jar o la dependencia implícita, así que gracias por eso. Sin embargo, lo anterior aún coloca los archivos jar en el directorio de la barra dentro del archivo Zip. - Alan Krueger

@Alan Pensé que tal vez se trataba de un problema con la versión de gradle. Acabo de cambiar al hito-3 (que está en sus notas) y lo probé. Tengo un proyecto con las mismas necesidades exactas y funciona bien. Por lo tanto, necesitará compartir más sobre su proyecto o archivo de compilación para diagnosticar más. - kensipe

Terminamos probando algo más hoy y modificándolo con el tiempo, llegamos a una solución que funcionó y que se parecía mucho a lo que publicaste. No estoy seguro de por qué no nos funcionó ayer. - Alan Krueger

Aparentemente, los comentarios a una respuesta no permitirán una forma conveniente de mostrar más código ... o no es obvio :) Tengo un proyecto que es para un cliente ... así que no puedo compartir el proyecto completo / archivo de compilación. Esto es lo que puedo compartir (cambié el acrón específico del proyecto a XXX):

zip de la tarea (tipo: Zip) {de jar.outputs.files de ('scripts /') {fileMode = 0755 include '** / runXXX.sh' include '** / runXXX.bat'} from ('lib /' ) {incluir '** / *. jar' en ('lib')} desde ('.') {incluir 'xxx.config'}}

Esto crea un zip con el jar del proyecto en la raíz del zip. Copia los scripts de un directorio a la raíz, copia el archivo de configuración a la raíz y crea un directorio en la raíz del zip llamado / lib y copia todos los archivos jar del proyecto / lib al zip / lib.

contestado el 17 de mayo de 11 a las 23:05

Esta respuesta no responde directamente a la pregunta, pero supongo que esto ayudaría a alguien que escribe 'Complementos de Gradle'

    final Zip zipTask = project.getTasks().create(taskName, Zip.class);
    
    final Action<? super CopySpec> cp1 = (p) -> {
        p.include("**/Install_*.xml", "**/Install.xml").into(WORKING_DIR_1);
    };
    final Action<? super CopySpec> cp2 = (p) -> {
        p.include("*Terminology*.xml").into(WORKING_DIR_2);
    };
    zipTask.from(projectDir + "/Release", cp1);
    zipTask.from(projectDir + "/Release", cp2);

Respondido 15 Jul 20, 07:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.