Jest sobie tak, że Spring Boot to fajna rzecz. W połączeniu z kilkoma prostymi dodatkami w rodzaju AngularJS i HSQLDB idealnie nadaje się do napisania aplikacji pokazowej na jakiś wykładzik. Tym razem trafiło na wykład o CI/CD zatem potrzebowałem skonfigurować kilka rzeczy. Jedną z nich jest maven-resource-plugin, który umożliwia m.in. podmianę treści plików w czasie budowania. Robi się to prosto w pom.xml dajemy:

Listing 1. konfiguracja pom.xml

<properties><run.port>11010</run.port></properties><build><plugins><plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid></plugin><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-resources-plugin</artifactid><version>2.7</version></plugin></plugins><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build>

najpierw ustawiamy pożądaną własność w sekcji properties, a potem w build.resources włączamy filtrowanie. Kolejny krok to przygotowanie pliku application.properties z konfiguracją naszej aplikacji:

Listing 2. konfiguracja application.properties

server.port=${run.port}

odpalamy i…

If you are inheriting from the spring-boot-starter-parent POM, the default filter token of the maven-resources-plugins has been changed from ${*} to @ (i.e. @maven.token@ instead of ${maven.token}) to prevent conflicts with Spring-style placeholders. If you have enabled maven filtering for the application.properties directly, you may want to also change the default filter token to use other delimiters.

Jak się okazuje jakiś kutasiarz w Springu postanowił sobie przekonfigurować dla jaj to jak działa maven. Pogratulować kurwa… Powyższe tłumaczenie ma jakiś tam sens, ale na bogów to przekracza wszelkie granice. Wiele lat temu była taka magiczna zasada by aplikacja była jak najmniej związana z wykorzystywanymi rozwiązaniami. Stąd wszystkie JSR-y, specyfikacje i tym podobne cyrki. Jednak ktoś ma to w dupie… tym kimś jest ekipa od springa. I jest to cholernie przykre, bo sami propagowali hasło „łatwej zmiany dostawcy”…

ps. prawidłowy plik powinien wyglądać tak:

Listing 3. prawidłowa konfiguracja application.properties

server.port=@run.port@

co tylko potwierdza, że ten kto to wymyślił w springu jest chujem i sadystą. Jak ja kurwa nienawidzę windowsowych zmiennych…