Отключить экранирование значений замены в 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><fileset dir="$1" includes="*.myext" /></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>