2016-05-09 2 views
0

Мы фильтруем файл xml, заменяя некоторые маркеры свойствами градиента.Задача копирования и фильтрации градиента не выполнена

Но фильтрация (т. Е. Задача копирования) не выполняется, когда мы просто изменяем свойства в нашем файле build.gradle.

Как нам изменить наш скрипт так, чтобы фильтрация выполнялась каждый раз или, по крайней мере, когда шаблон и/или build.gradle были изменены.

Это мы имеем:

war.doFirst { 
    delete 'src/main/webapp/WEB-INF/appengine-web.xml' 

    copy { 
     from 'build.gradle' 
     from 'src/main/webapp/WEB-INF/' 
     into 'src/main/webapp/WEB-INF/' 
     include '*-template.*' 

     rename { String fileName -> 
      fileName.replace('-template', '') 
     } 

     expand(gaeApp: "$gaeApp", gaeAppVersion: "$gaeAppVersion") 
    } 
} 

Я просто побежал некоторые испытания, где фильтрация работала. Я смущен ... Я уверен, что иногда это не так!

Таким образом, после хорошего входа с Вампиров мы попытались это

war { 
    inputs.file "build.gradle" 

    exclude 'src/main/webapp/WEB-INF/appengine-web.xml' 

    // filesMatching('src/main/webapp/WEB-INF/**/*-template.*') { 
    filesMatching('**/*-template.*') { 

     println "WAR template: $it" 

     rename { it.replace '-template', '' } 
     expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion 
    } 
} 

А доллар и десять центов для всех, кто может объяснить, почему filesMatching('src/main/webapp/WEB-INF/**/*-template.*') не работает!

НО БОЛЬШАЯ проблема заключается в том, что даже если файлыMatching обнаруживает файл шаблона, appengine-web.xml, который находится внутри WAR, не является обработанной версией appengine-web-template.xml.

ответ

0

Вам нужно добавить эти свойства к входам задачи, как

war.inputs.property 'gaeApp', gaeApp 
war.inputs.property 'gaeAppVersion', gaeAppVersion 

так, что Gradle знает вход изменен, в противном случае он не может знать, когда вход отличается.

Но кроме того, вы не должны (не должны) использовать там блок copy { }. war сама задача является неявной копией спецификации, так что вы должны быть в состоянии просто делать что-то вроде

war { 
    inputs.property 'gaeApp', gaeApp 
    inputs.property 'gaeAppVersion', gaeAppVersion 

    exclude 'src/main/webapp/WEB-INF/appengine-web.xml' 

    filesMatching('src/main/webapp/WEB-INF/**/*-template.*') { 
     rename { it.replace '-template', '' } 
     expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion 
    } 
} 
+0

Только что столкнулся с проблемой с этим решением. Он не копирует/фильтрует, когда мы вносим изменения в build.gradle. –

+0

Зависит от того, что вы меняете. Для выполнения задачи входы и/или выходы должны измениться. Поэтому, если вы хотите всегда запускать задачу после изменения файла градации, добавьте файл градации к входам с помощью 'inputs.file ...'. Если вы просто хотите убедиться, что он запущен в следующий раз, когда кто-то выполнит его после вашего изменения, потому что вы изменили e. г. шаблон сопоставления либо добавляет шаблон соответствия к входам, как переменные или версии, к задаче типа 'inputs.property 'version', 1', которую вы вручную увеличиваете после того, как вы изменили настройку задачи, не влияя на входы/выходы. – Vampire

+0

КПП. если ответ вам помог, пожалуйста, прочитайте и повинуйтесь http://stackoverflow.com/help/someone-answers (упрек отсутствовал). И почему вы не приняли ответа? Это нехорошее поведение. Ответ на этот вопрос вполне подходит. – Vampire

0

Это то, что работает для нас в конце концов.

Мы переместили шаблон «SRC/шаблон/веб-приложение» и удалить «-template» суффикс

war { 
    inputs.file "build.gradle" 
    with copySpec { 
     from 'src/template/webapp' 
     expand gaeApp: gaeApp, gaeAppVersion: gaeAppVersion 
    } 
} 

Наша проблема с решением вампира должно быть связано с тем, что файл шаблона был в то же как файл, который он должен был заменить.

Смежные вопросы