Сценарий сборки Ant с использованием Groovy и регулярных выражений. Как построить шаблон, используя строковое значение? - PullRequest
0 голосов
/ 25 марта 2012

Как использовать строковое значение как часть регулярного выражения в groovy?Я пишу скрипт сборки Ant с использованием groovy, вот несколько снимков:

<target name="groovy.showProperties">
    <groovy>
        class ShowProperties extends org.apache.tools.ant.Task {
            String nameMatch;   

            public void execute() {
                    project.properties.each
                        {prop ->
                           //I don't know how to obtain nameMatch value
                            if(prop.key ==~ /.*nameMatch.*/) 
                            {
                                println prop;
                            }
                        };

            }
        }
        project.addTaskDefinition('dump', ShowProperties)
    </groovy>

    <echo>example:</echo>
    <dump nameMatch="lang"/>
</target>

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Должно быть:

/.*${nameMatch}.*/

Разве это не работает?

Edit:

Взяв ваше примерное задание и завернув его в действительное build.xml, вот так:

<?xml version="1.0" encoding="UTF-8"?>
<project name="ItWorks" basedir=".">
    <property environment="env"/>

    <path id="lib.path">
        <fileset dir="${env.GROOVY_HOME}">
            <include name="lib/*.jar"/>
        </fileset>
    </path>

    <taskdef name="groovy"
             classname="org.codehaus.groovy.ant.Groovy"
             classpathref="lib.path"/>

    <target name="groovy.showProperties">
        <groovy>
            class ShowProperties extends org.apache.tools.ant.Task {
                String nameMatch;   

                public void execute() {
                    project.properties.each { prop ->
                        if( prop.key ==~ /.*${nameMatch}.*/ ) {
                            println prop
                        }
                    }
                }
            }
            project.addTaskDefinition('dump', ShowProperties)
        </groovy>

        <echo>example:</echo>
        <dump nameMatch="lang"/>
    </target>
</project>

Тогда я могу сделать:

ant groovy.showProperties

И я получаю вывод:

Buildfile: /Users/tim/Code/test/build.xml

groovy.showProperties:
     [echo] example:
     [dump] user.language=en

BUILD SUCCESSFUL
Total time: 1 second

Нет ошибок разбора или чего-то еще ... Какую версию Groovy вы используете?

0 голосов
/ 26 марта 2012

Я в конце концов нашел решение:

в этом простом примере достаточно:

prop.key =~ nameMatch

однако более общий подход будет:

prop.key ==~ ".*"+nameMatch+".*"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...