Удалить строку из файла, используя сценарий Groovy - PullRequest
0 голосов
/ 08 марта 2020

Будучи новичком в groovy Я боролся с простой задачей удаления строки и добавления новой в файл (properties.file). Я не могу найти правильное и простое решение для этого случая.

Фактическая цель - изменять значение ApplicationVersion с каждым новым выпуском приложения. Версия будет установлена ​​из другой переменной ($ version), которая будет меняться с каждым выпуском. После разных подходов я пришел к выводу, что самым простым решением будет удаление строки и добавление новой.

  1. Учитывая следующий файл application.properties, как удалить строку 3 и добавить вместо нее новую

  2. Или как использовать решение с подстрокой, чтобы изменить жестко запрограммированную версию 3.5.7 с новой версией $ (которая будет установлена ​​из разных файлов).

# Application configuration

ApplicationVersion                      = 3.5.7
XmlMetadataFile                         = metadata.xml

DataPath                                = /home/dev/data
# linux: /home/app/data
# win: c:/data/

ApplicationLocaleLanguage               = GB
ApplicationLocaleCountry                = GB

Опция могла бы быть:

def applicationProperties = new File("/Users/user/app/resources/application.properties")
def fileText = applicationProperties('UTF-8')

fileText = (fileText =~ /3.5.7/).replaceAll("$version")
applicationProperties.write(fileText)

Однако это работает только один раз. Для следующего обновления версии решение (fileText = ~ /3.5.7/) не будет работать, так как 3.5.7 не будет найдено после предыдущего обновления.

Ответы [ 3 ]

0 голосов
/ 09 марта 2020

Если это шаг вашего процесса сборки, вы можете использовать магию Gradle c с filter.

Что-то вроде

ext.version = '11.24.3'

task processIndex( type:Copy ) {
  from 'src/main/webapp/build'
  into "$buildDir/resources/main"
  filter{ 
    it.replaceAll( 'ApplicationVersion([\s]*=[\s]*)([\d\.]+)"/', 'ApplicationVersion$1' + ext.version )
  }
}
0 голосов
/ 09 марта 2020

Существует простое однострочное решение с AntBuilder.

def version = '1.1.2'
new AntBuilder().replaceregexp(file: 'application.properties', match: /(ApplicationVersion[\s]*=[\s]*).*/, replace: /\1/ + version)
0 голосов
/ 09 марта 2020

Я нашел решение проблемы. Это решение создает новую пустую строку и добавляет к ней "ApplicationVersion \ t \ t \ t \ t =" + $ version + "\ n", если в документе свойств найдена интересующая строка.

Все еще не определено как это работает

а. Перезаписывает ли это интересную линию? б. Создает ли он новый документ, который перезаписывается?

def applicationProperties = new File("/Users/user/app/resources/application.properties")
def fileText = applicationProperties.getText('UTF-8')

def newLine = '';
def version = 9.1.1;
fileText.eachLine {
    if (it =~ /ApplicationVersion/) {
        newLine += "ApplicationVersion\t\t\t\t= " + version + "\n"
    } else {
        newLine += it + "\n"
    }
}

applicationProperties.write(newLine)

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