2016-11-27 4 views
1

Мой pom.xml файл выглядит следующим образом:Как избежать обратных косых черт в фильтрах файлов свойств с Maven?

<testResource> 
    <directory>src/test/resources</directory> 
    <filtering>true</filtering> 
    <includes> 
     <include>env.properties</include> 
    </includes> 
</testResource> 

Мои env.properties выглядит следующим образом:

my.path=${project.build.directory} 

Когда я построить проект, то env.properties является сгенерировано, как показано ниже:

my.path=C:\\path\\to\\directory 

Как я могу получить результат ниже?

my.path=C:\\\\path\\\\to\\\\directory 
+1

Зачем вам этот выход? 'C: \\\\ path \\\\ to \\\\ directory' - это неправильный путь внутри файла свойств. – Tunaki

+0

@ Tunaki Ну, я использую стороннюю библиотеку, которая объединяется с именами файлов наподобие этого 'C: pathtodirectory'. Мое фактическое обходное решение заключается в том, чтобы вручную удалить имена файлов ('filename.replace (" \\ ","/")'), прежде чем передавать их в библиотеку. Я надеялся найти чистое решение Maven. – Stephan

+0

@ Тунаки. Вы ответили быстрее, чем я исправляю. – Stephan

ответ

2

Это странно, что хочу сделать, но вы могли бы использовать build-helper-maven-plugin:regex-property цели. Эта цель позволяет создать свойство Maven, которое является результатом применения регулярного выражения к некоторому значению, возможно, с заменой.

В этом случае регулярное выражение заменяет все черные метки, то есть \\, так как они должны быть экранированы внутри обычного выражения, а заменой будет 4 обратная косая черта. Обратите внимание, что плагин автоматически избегает регулярного выражения для Java, поэтому вам не нужно также скрывать Java.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.12</version> 
    <executions> 
    <execution> 
     <id>escape-baskslashes</id> 
     <phase>validate</phase> 
     <goals> 
     <goal>regex-property</goal> 
     </goals> 
     <configuration> 
     <value>${project.build.directory}</value> 
     <regex>\\</regex> 
     <replacement>\\\\\\\\</replacement> 
     <name>escapedBuildDirectory</name> 
     <failIfNoMatch>false</failIfNoMatch> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Это сохранит разыскиваемого путь внутри escapedBuildDirectory собственности, которые впоследствии можно использовать как стандартное свойство Maven как ${escapedBuildDirectory}, в файле ресурсов. Свойство создается в фазе validate, которая является первой фазой, вызванной Maven во время сборки, так что ее также можно использовать где угодно, в качестве параметра плагина.

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