Задача сборки Ant: как изменить базовый каталог для команды ant (например, как сделать компакт-диск) с помощью Grails 2.5

Приведенный ниже фрагмент ant из цели, указанной в каталоге Grails «Scripts», создает один файл с контрольными суммами всех классов, чтобы их можно было проверить на целевых серверах.

Вывод муравья — это такой файл:

c9b1c71b31e53e99ff31b4be0a1284558aa019ec target/classes/bo/ApiRequestFilters$_closure1.class
ff936fddc1b99ba323493b131d271ca4feb0f5dd target/classes/bo/ApiRequestFilters.class
df7a12fe1182b5fc10177a2559a3a0cbb0709e29 target/classes/com/xxx/yyy/apiConstants.class

Проблема в слове «цель» в пути к файлу. Когда приложение развернуто на tomcat под веб-приложением, цели нет.

Как этого избежать? Например. если функция ant.concat взяла baseir:"target", если бы вы могли сделать ant.cd("target") или подобное, это решило бы проблему, или если бы вы могли указать baseir для каждой цели, но это не похоже возможный?

Источник:

ant.checksum(fileext:".sha1", algorithm: "SHA", forceoverwrite: "yes", pattern: "{0} {3}") {
    fileset(dir: "target/classes") {
        include(name:"**/*.class")
    }
}

ant.concat(destfile:"target/classes.sha1") {
   fileset(dir: "target/classes") {
       include(name:"**/*.sha1")
   }
}

Я нашел один хакерский способ - удалить "target/" из файла sha1 после использования:

ant.replace(file:"target/classes.sha1", token:" target/", value: " ")

Есть ли способ лучше?


person John Little    schedule 06.01.2016    source источник


Ответы (1)


Для небольшого улучшения оптимизации рассмотрите возможность удаления задачи replace, вложив filterchain под concat .

В следующем примере фильтр replaceregex использует регулярное выражение для сопоставления строк. начиная с хеш-значений, за которыми следует строка target/. Если начало строки совпадает, оно заменяется удаленной частью target/:

ant.concat(destfile:"target/classes.sha1") {
    fileset(dir: "target/classes") {
        include(name:"**/*.sha1")
    }
    filterchain {
        tokenfilter {
            // Using the regex "pattern" to match:
            //
            // "^": from the start of each line...
            // "[0-9a-f]+": ...match as many hexadecimal characters as possible...
            // " ": ...followed by a space character...
            // "target/": ...followed by the string "target/".
            //
            // "([0-9a-f]+ )": captures the matching characters in group 1
            //
            // Then in "replace":
            // "\\1": inserts capture group 1
            //
            replaceregex(pattern: "^([0-9a-f]+ )target/", replace: "\\1")
        }
    }
}

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

person Chad Nouis    schedule 07.01.2016