Извлечь повторяющееся регулярное выражение в класс util в Spring Cloud Contract

У меня есть определение контракта, вот его часть:

...
queryParameters {
  parameter('postcode': $(
    client(ukPostcode()),
    server('PH16 5RU')
  )
...

поверх моего contract.groovy у меня есть:

static String ukPostcode() {
    return Pattern.compile("(?i)^[A-Za-z]{1,2}[0-9R][0-9A-Za-z]? ?[0-9][ABD-HJLNP-UW-Z]{2}\$(?-i)").pattern()
}

Это работало нормально, пока мне не понадобилось ukPostcode() в другом файле контракта в том же проекте. Я пытался:

  • создание чего-то вроде класса CustomPatterns со статическим методом в CustomPatterns.groovy в той же папке, где находятся контракты, и его импорт
  • создание того же класса под src/main/groovy, src/main/java, src/test/groovy, src/main/groovy и т. д.

Плагин контракта, похоже, не видит класс ни в одном из этих мест.

Есть ли правильный способ поделиться каким-либо методом (или константой) между файлами контракта?

РЕДАКТИРОВАТЬ: это проект с одним модулем, и делать его многомодульным только ради решения этой проблемы нежелательно.


person tsayen    schedule 28.01.2019    source источник


Ответы (1)


Все описано в документации https://cloud.spring.io/spring-cloud-static/spring-cloud-contract/2.1.0.RELEASE/single/spring-cloud-contract.html#_exnding_the_dsl

Достаточно создать отдельный jar-файл с служебными функциями, а затем повторно использовать его в пути к классам плагина на стороне производителя и на стороне получателя в самих зависимостях.

person Marcin Grzejszczak    schedule 01.02.2019
comment
Спасибо, я прочитал документы, прежде чем отправлять этот вопрос. Создание отдельного jar-файла в этом проекте проблематично, поскольку это проект с одним модулем, а введение отдельного модуля только для совместного использования одного или двух регулярных выражений выглядит излишним и, вероятно, не будет очень приветствоваться командой. Я надеялся, что есть какая-то золотая середина между наличием функции util в том же файле, где находится контракт, и ее размещением в совершенно отдельном модуле. - person tsayen; 06.03.2019