Символ, который нужно экранировать, отсутствует с String.ReplaceAlli в Gradle - PullRequest
0 голосов
/ 23 мая 2018

У меня есть следующие операторы в задаче файла gradle, но при его выполнении выдается ошибка «Символ, который нужно экранировать, отсутствует».

String contents = new File( 'settings/tomcat-config/catalina.bat' ).getText()
contents = contents.replaceAll('-Dappspace.home=[^\"]*','test');

Кажется тривиальным, но не смог выяснить проблему.

enter image description here

1 Ответ

0 голосов
/ 23 мая 2018

Предполагая, что ваш файл catalina.bat содержит строку вдоль строк:

set APP_HOME=-Dappspace.home="%CATALINA_BASE%\somedir"

, тогда вы захотите включить " в совпадение.Другими словами, при выполнении:

def contents = new File('catalina.bat').text
println contents.replaceAll('-Dappspace.home="([^"]+)"','test')

будет напечатано:

set APP_HOME=test

, а при выполнении:

def contents = new File('catalina.bat').text
println contents.replaceAll(/(-Dappspace.home=")([^"]+)/, '$1test')    

будет напечатано:

set APP_HOME=-Dappspace.home="test"

Я подозреваю, что это ближе к тому, что вы хотите.Если вы хотите заменить содержимое файла, вы можете просто:

def file = new File(...)
file.text = file.text.replaceAll(...)

также, поскольку он находится в файле gradle, вы можете использовать метод gradle dsl project.file и заменить new File(...) с просто file(...) в вашем коде, что дает нам окончательную версию (при условии, что вы собираетесь заменить строку в содержимом файла):

def f = file('catalina.bat')
f.text = f.text.replaceAll(/(-Dappspace.home=")([^"]+)/, '$1test')    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...