Java 多个Maven配置文件激活多个弹簧配置文件
我想在Maven中创建一个环境,在这个环境中,我想根据激活的Maven配置文件累计激活多个spring配置文件 目前,my pom.xml的相关部分如下所示:Java 多个Maven配置文件激活多个弹簧配置文件,java,spring,maven,Java,Spring,Maven,我想在Maven中创建一个环境,在这个环境中,我想根据激活的Maven配置文件累计激活多个spring配置文件 目前,my pom.xml的相关部分如下所示: <profiles> <profile> <id>local-db-development</id> <activation> <activeByDefault>true</activeByDefa
<profiles>
<profile>
<id>local-db-development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<spring.profiles.active>local-db</spring.profiles.active>
</properties>
</profile>
<profile>
<id>live-db-development</id>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<spring.profiles.active>live-db</spring.profiles.active>
</properties>
</profile>
<profile>
<!--
If active, the user authentication will be through LDAP and AD,
Database auth will be used otherwise
-->
<id>ldap-authentication</id>
<properties>
<spring.profiles.active>ldap-authentication</spring.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
</dependencies>
</profile>
</profiles>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.6</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.9</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<executions>
<execution>
<id>concatMavenProfiles</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<scripts>
<script><![CDATA[
def value = ""
(project.activeProfiles).each{ profile -> value += profile.properties.springProfiles + "," }
project.properties.setProperty('spring.profiles.active', value.substring(0, value.length() - 1))
]]>
</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
本地数据库开发
真的
com.h2数据库
氢
运行时
本地数据库
实时数据库开发
org.postgresql
postgresql
运行时
实时数据库
ldap身份验证
ldap身份验证
org.springframework.security
spring安全ldap
org.apache.directory.server
apacheds服务器jndi
1.5.5
我的问题是,当我激活ldap身份验证配置文件时,只有相关的spring配置文件处于活动状态,而不考虑任何*-db配置文件
我想这样做,我可以激活ldap身份验证和本地db maven配置文件,然后两个相关的spring配置文件都应该被激活,或者当我激活ldap身份验证和live db in maven时,这两个spring配置文件将被激活
我还没有找到一种方法来收集spring的资料,所以如果你知道的更多,请告诉我
提前感谢好的,我找到了一个解决方案:你需要一个groovy插件,它看起来像这样:
<profiles>
<profile>
<id>local-db-development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<spring.profiles.active>local-db</spring.profiles.active>
</properties>
</profile>
<profile>
<id>live-db-development</id>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<spring.profiles.active>live-db</spring.profiles.active>
</properties>
</profile>
<profile>
<!--
If active, the user authentication will be through LDAP and AD,
Database auth will be used otherwise
-->
<id>ldap-authentication</id>
<properties>
<spring.profiles.active>ldap-authentication</spring.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
</dependencies>
</profile>
</profiles>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.6</version>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.4.9</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<executions>
<execution>
<id>concatMavenProfiles</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<scripts>
<script><![CDATA[
def value = ""
(project.activeProfiles).each{ profile -> value += profile.properties.springProfiles + "," }
project.properties.setProperty('spring.profiles.active', value.substring(0, value.length() - 1))
]]>
</script>
</scripts>
</configuration>
</execution>
</executions>
</plugin>
org.codehaus.gmavenplus
gmavenplus插件
1.6
org.codehaus.groovy
groovy all
2.4.9
运行时
concatMavenProfiles
初始化
执行
值+=profile.properties.springProfiles+“,”}
project.properties.setProperty('spring.profiles.active',value.substring(0,value.length()-1))
]]>
此脚本从活动配置文件中获取所有属性,并将它们连接到一个字符串中。
然后在主标记中设置属性
我将配置文件中的标记切换为,这样它们就没有相互冲突和覆盖的机会
根据我的经验,您还需要在项目标记中定义一个空标记。我遇到了一个类似的问题,我不得不基于spring概要文件使用Artemis或RabbitMQ组件,但还想包括其他概要文件(例如dev、prod) 我在pom.xml中这样做:
<profiles>
<profile>
<id>artemis</id>
<activation>
<property>
<name>messaging.service</name>
<value>artemis</value>
</property>
</activation>
<properties>
<includeSpringProfile>artemis-profile</includeSpringProfile>
</properties>
</profile>
<profile>
<id>rabbitmq</id>
<activation>
<property>
<name>!messaging.service</name>
</property>
</activation>
<properties>
<includeSpringProfile>rabbitmq-profile</includeSpringProfile>
</properties>
</profile>
</profiles>
现在当我跑步时:
mvn-spring-boot:run-dsspring-boot.run.arguments=--spring.profiles.active=prod
prod和rabbitmq配置文件都已激活:
2019-12-11 18:46:52.296 INFO 837 --- [ restartedMain] c.l.tacocloud.TacoKitchenApplication : The following profiles are active: rabbitmq-profile,prod
参考资料:“这样我就可以单击ldap身份验证和本地数据库,然后单击”??请详细说明你的意思。您在应用程序的范围内单击,而不是在运行可执行文件(如
mvn
)时单击。编辑,我希望现在更清晰。“单击”是指当我在IntelliJ中激活maven概要文件时的操作(如单击复选框),您不应该这样做。您应该构建单个工件,而不是为不同的概要文件构建一个工件。Maven简介!=我知道,这是我的问题。我想这样做,这样每个活跃的maven配置文件都会激活相关的spring配置文件,而不会互相覆盖。您能详细说明我为什么不应该这样做,或者有什么更好的方法来解决我的问题吗?哦,这个问题的重点是,我想用一个以上的活动spring配置文件构建一个工件