Отключить экранирование значений замены в build-helper:regex-property

Я хочу заменить свойство в Maven на основе регулярного выражения. Для этого я использую regex-property плагин. Свойство будет содержать разделенные пробелами записи, и мне нужно создать xml-узел из каждого из них.

"C:\some\entry D:\another\entry"

   (processing here ... below is the content of variable after processing)

<fileset dir="C:\some\entry" includes="*.myext" />
<fileset dir="D:\another\entry" includes="*.myext" />

Замененное свойство затем следует использовать для копирования данных артефактов:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>copy files</id>
            <phase>initialize</phase>
            <configuration>
                <tasks>
                    <copy todir="${project.basedir}/somedir">
                        ${processedPaths} <!-- THIS WILL EXPAND TO <fileset ... /> -->
                    </copy>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

У меня есть кое-что, что почти работает:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.12</version>
    <executions>
        <execution>
            <id>regex-property</id>
            <goals>
                <goal>regex-property</goal>
            </goals>
            <configuration>
                <name>testprop</name>
                <value>${testprop}</value>
                <regex>([^\s]+)</regex>
                <replacement>&lt;fileset dir="$1" includes="*.myext" /&gt;</replacement>
                <failIfNoMatch>false</failIfNoMatch>
            </configuration>
        </execution>
    </executions>
</plugin>

Но проблема здесь в том, что replacement сбежал где-то по пути. Таким образом, полученное свойство будет содержать <fileset dir\="C\:\\some\\entry" includes\="*.myext" />, что не желательно.

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

1 ответ

Я не упомянул важную вещь - этот проект создается из архетипа. Генерация проекта из архетипа означает, что можно использовать синтаксис Velocity. Это немного упрощает мой конкретный вариант использования. Рабочая выдержка из pom.xml выглядит так:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>copy files</id>
            <phase>initialize</phase>
            <configuration>
                <tasks>
                    <copy todir="${project.basedir}/${somedir}">
                        #foreach( $file in $filesPath.split(",") )
                        <fileset dir="$file.trim()" includes="*.myext"/>
                        #end
                    </copy>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

#foreach директива будет подобрана Velocity и распечатает <fileset ... строка для каждой записи через запятую в $filesPath имущество.

И в archetype-metadata.xml объявлено:

<requiredProperty key="filesPath"/>

призвание mvn archetype:generate ... "-DfilesPath=/some/path/, /other/path" затем сгенерирует правильные узлы:

<copy todir="${project.basedir}/${somedir}">
    <fileset dir="/some/path" includes="*.myext"/>
    <fileset dir="/other/path" includes="*.myext"/>
</copy>
Другие вопросы по тегам