Spring Boot: автоматическое расширение свойства с использованием Maven и определенных профилей Maven не работает
Я пытаюсь использовать автоматическое расширение свойства 72.1.1 с использованием Maven, как указано в документации, с использованием различных профилей maven, но я не могу заставить его работать с конкретными профилями.
У меня есть следующее pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<profiles>
<profile>
<id>local</id>
<activation>
<property>
<name>profileName</name>
<value>local</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueA</wildcard.for.customproperty>
</properties>
</profile>
<profile>
<id>external</id>
<activation>
<property>
<name>profileName</name>
<value>external</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueB</wildcard.for.customproperty>
</properties>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.9.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
И это очень просто application.properties
:
custom.property=@wildcard.for.customproperty@
Я запускаю сборку maven с Spring Tool Suite со следующими целями:
clean install -DprofileName=local
Сборка УСПЕХ, но application.properties
в целевой папке по-прежнему содержится неразрешенное @...@
заполнитель.
Если я добавлю эту простую строку в pom.xml в одном из двух профилей:
<activeByDefault>true</activeByDefault>
Заполнитель правильно разрешен.
Что не так с этой конфигурацией?
2 ответа
Вы объявили spring-boot-starter-parent
как зависимость вашего проекта, а не использовать его в качестве родителя проекта. Это должно быть объявлено так:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
Затем вы должны также удалить <version>
декларация от других зависимостей Spring Boot. Конфигурация ресурсов также избыточна, поэтому я бы порекомендовал ее тоже удалить. В общем и целом, ваш пом будет выглядеть примерно так:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<profiles>
<profile>
<id>local</id>
<activation>
<property>
<name>profileName</name>
<value>local</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueA</wildcard.for.customproperty>
</properties>
</profile>
<profile>
<id>external</id>
<activation>
<property>
<name>profileName</name>
<value>external</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueB</wildcard.for.customproperty>
</properties>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Я решил со следующей конфигурацией:
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<profiles>
<profile>
<id>local</id>
<activation>
<property>
<name>profileName</name>
<value>local</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueA</wildcard.for.customproperty>
<activatedProperties>local</activatedProperties>
</properties>
<build>
<finalName>myBuild-local</finalName>
</build>
</profile>
<profile>
<id>external</id>
<activation>
<property>
<name>profileName</name>
<value>external</value>
</property>
</activation>
<properties>
<wildcard.for.customproperty>valueB</wildcard.for.customproperty>
<activatedProperties>external</activatedProperties>
</properties>
<build>
<finalName>myBuild-external</finalName>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.9.RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@{*}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.properties:
custom.property=@{wildcard.for.customproperty}
spring.profiles.active=@{activatedProperties}
Наконец, самый важный шаг:
В STS нужно щелкнуть правой кнопкой мыши на Project -> Properties -> Maven.
Там нужно указать активный профиль.
По некоторым причинам, даже если вы поместите параметр -PprofileName или профиль непосредственно в поле профиля сборки Maven, STS не применит этот профиль.