2012-04-25 10 views
11

Tengo algunos archivos que necesitan reemplazo de token ... en lugar de la única @ predeterminada, usan double @ 's ... Entonces necesito cosas como: @@ replaceme @@ .. reemplazado.Gradle - cambie Token de inicio/finalización cuando use ReplaceTokens

filtro replaceTokens de hormiga le permite establecer que el uso de BeginToken/EndToken .. Aunque no estoy seguro de cómo configurarlo en mi ejemplo:

copy{ 
    into something 
    from somethingelse 
    filter(ReplaceTokens, tokens: []) 
} 

¿Cómo puedo cambiar el código anterior para reemplazar correctamente trabajar con double @@ tokens en lugar de solo?

Respuesta

11

Es fácil cambiar los delimitadores: simplemente agregue los parámetros con nombre beginToken y endToken a la llamada al método filter. Sin embargo, el ReplaceTokens de Ant solo admite delimitadores de un solo carácter. Una búsqueda rápida en la web no apareció una Ant FilterReader que admite delimitadores arbitrarios de caracteres múltiples de fábrica. Una alternativa es codificarlo usted mismo, implementando FilterReader o usando el método de forma libre filter.

+2

agradable .. Se perdió la falta de apoyo para los delimitadores no de un solo carácter que es probablemente la razón por mi código no estaba funcionando. – vicsz

10

Me encontré en una situación similar (no exacta). Tuve que procesar los recursos de propiedades que estaban en formato maven. es decir, el formato $ {} '.

Cuando pasé a gradle, la tarea processTestResources no reemplazó los valores en $ {}. Esto se debe a la misma razón por la que usa '@' un solo carácter delimitado. Encontré un truco para lograr lo que quería.

configure(tasks.processTestResources) { 
    include '**/*.properties' 
    filter(ReplaceTokens, 
      tokens: ['$':'={'], beginToken : '=', endToken : '{') 
    filter(ReplaceTokens, 
      tokens: [project.properties], beginToken : '{', endToken : '}') 
} 
+1

Totalmente pirata y funciona totalmente! Estoy usando tokens formateados **/\ * @ TOKEN @ \ */** para que sean válidos en cualquier lugar de CSS/JS y el siguiente truco es: 'filter (org.apache.tools.ant. filters.ReplaceTokens, tokens: ['*': '@'], beginToken: '/', endToken: '@') ' ' filter (org.apache.tools.ant.filters.ReplaceTokens, tokens: [' * ':' @ '], beginToken:' @ ', endToken:'/') ' – Tyler

0

Aquí hay otra solución. Utilice la tarea de copia Ant en lugar de la tarea de copia de Gradle.

task copyWithMultiCharTokenMark << { 
    ant.copy(todir: 'copy_into_dir') { 
     fileset(dir: 'copy_from_dir') 
     filterset(begintoken:'@@', endtoken:'@@') { 
      filter(token:'replaceme', value:'Am I replaced?') 
     } 
    } 
} 

He encontrado esta manera al buscar una solución para el problema de codificación de archivos con la tarea de copia.

5

Las otras respuestas parecen ser viejo e informar que no se puede utilizar varios caracteres delimitadores de tokens. Pero he encontrado que no es el caso más con Gradle 2.14.1

copy{ 
    into something 
    from somethingelse 
    filter(ReplaceTokens, tokens: [map], beginToken : '@@', endToken : '@@') 
    // or, maven prop stle: 
    // filter(ReplaceTokens, tokens: [map], beginToken : '${', endToken : '}') 

} 
+0

Confirmado que también funciona para mí. Gracias. – coding

+0

¡Esta debería ser la respuesta aceptada ya que cualquier versión hizo el cambio que permitía los delímetros de caracteres no únicos! – tom01

Cuestiones relacionadas