Как отключить кеширование свойств gradle? - PullRequest
0 голосов
/ 30 апреля 2020

В зависимости от пользователя из файла загружается другой набор свойств.

ext.userProps = new Properties(defaults.userProperties)
file("env/configurations/user_${userName}.properties").withInputStream { userProps.load(it) }
  1. Пользователь запускает первую сборку -> все отлично работает
  2. Пользователь изменяет свойство в файле
  3. Запускает сборку снова -> gradle по-прежнему использует старые свойства

Обходной путь: запуск gradlew clean после каждого изменения файла свойств. Тогда это работает как ожидалось.

Как я могу напрямую указать gradle: не кэшировать загруженные свойства?


Редактировать: Свойства затем используются для замены строк в файлах конфигурации.

ext.dbconfig = ""
ext.siteProps = new Properties(defaults.siteProperties)
file("env/configurations/site_${siteName}.properties").withInputStream { siteProps.load(it) }

ext.userProps = new Properties(defaults.userProperties)
file("env/configurations/user_${userName}.properties").withInputStream { userProps.load(it) }

ext.tokens = [
        // WEB-INF/web.xml
        smtpHostName              : "${siteProps.'mail.smtp.host'}".toString(),
        smtpPassword              : "${siteProps.'mail.smtp.password'}".toString(),
        hibernateSchemaCreation   : "${userProps.'hibernate.schema.creation'}".toString(),
        documentExportMode        : "${userProps.'document.exportMode'}".toString(),
        multipartConfigLocation   : "${siteProps.'multipartConfigLocation'}".toString(),

        // META-INF/context.xml">
        'hibernate.datasource.url': "${userProps.'hibernate.datasource.url'}".toString(),
        'hibernate.dialect' : "${userProps.'hibernate.dialect'}".toString(),
        'hibernate.connection.username' : "${userProps.'hibernate.connection.username'}".toString(),
        'hibernate.connection.password' : "${userProps.'hibernate.connection.password'}".toString(),
        'hibernate.connection.driver.class': "${userProps.'hibernate.connection.driver.class'}".toString(),
]

1 Ответ

1 голос
/ 30 апреля 2020

Проблема в том, что вы используете внешние данные для воздействия на результат выполнения некоторых задач, не сообщая об этом Gradle. Это нарушает актуальную проверку.

Посмотрите документацию о текущей проверке и, в частности, Runtime API , который позволяет вам чтобы сообщить существующим задачам Gradle о необходимости рассмотрения другого ввода.

Как только все входы объявлены правильно, изменение файла этих свойств заставит Gradle повторно выполнить соответствующие задачи.

Так что, учитывая, что вы указали, что вы, скорее всего, захотите усовершенствовать задачу processResource, которая будет правильно выполняться при каждом изменении файла свойств. В результате произойдет смена изготовленной банки, что приведет к повторному запуску тестов и т. Д. c ...

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