maven 配置 profiles
1.pom 使用 结构1 最父级parent 方案
1.1 以以下项目演示
ai
├─common-framework-all
│ ├─framework-knife4j
│ │ └─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─minimalism
│ │ │ │ └─swagger
│ │ │ ├─config
│ │ │ └─scan
│ │ └─resources
│ └─framework-langchain4j
└─micro-service
└─ai-langchain4j
├─main
│ ├─java
│ │ └─com
│ │ └─minimalism
│ │ └─ai
│ │ └─langchain4j
│ │ ├─controller
│ └─resources
└─test
└─java
└─com
└─example
ai pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://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>3.1.0</version>
</parent>
<groupId>com.minimalism</groupId>
<artifactId>ai</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>17</java.version>
<project-module.version>0.0.1-SNAPSHOT</project-module.version>
<project-module-ai.version>0.0.1-SNAPSHOT-AI</project-module-ai.version>
<project.Encoding>UTF-8</project.Encoding>
<spring-boot.version>3.1.0</spring-boot.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>${project.Encoding}</project.build.sourceEncoding>
<project.reporting.outputEncoding>${project.Encoding}</project.reporting.outputEncoding>
<hutool.version>5.8.25</hutool.version>
<lombok.version>1.18.26</lombok.version>
</properties>
<!--远程仓库-->
<repositories>
<repository>
<id>aliyun-public</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots-repo</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>common-framework-all</module>
<module>micro-service</module>
</modules>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
</project>
micro-service pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minimalism</groupId>
<artifactId>ai</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>micro-service</artifactId>
<packaging>pom</packaging>
<modules>
<module>ai-langchain4j</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.Encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
ai-langchain4j pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minimalism</groupId>
<artifactId>micro-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ai-langchain4j</artifactId>
<properties>
<langchain4j.version>1.0.0-alpha1</langchain4j.version>
</properties>
<dependencies>
<dependency>
<groupId>com.minimalism</groupId>
<artifactId>framework-knife4j</artifactId>
<version>${project-module-ai.version}</version>
</dependency>
<dependency>
<groupId>com.minimalism</groupId>
<artifactId>framework-langchain4j</artifactId>
<version>${project-module.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama-spring-boot-starter</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-web-search-engine-searchapi</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-pgvector</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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>
</project>
以上为演示的3层父子pom
application.yml
spring:
profiles:
active: @spring.profiles.active@
#@spring.profiles.active@==>占位符
#必须与以下定义的值一致 如properties下有 <xxx.a>test</xxx.a>其占位符为 @xxx.a@ xxx.a为自定义
#<properties>
#<spring.profiles.active>test</spring.profiles.active>
#</properties>
效果图如下
演示视频
特点: parent 直接在最父级继承pring-boot-starter-parent 统一了springboot版本同时也限制了springboot版本不可在micro-service下的模块中使用不同的springboot版本 耦合性极高
2.pom 使用 结构2 dependencyManagement 方案
minimalism
├─common-base-all
│ ├─common-base
│ ├─common-base-aop
│ └─common-code
├─common-dao-module-all
│ ├─dao-all
│ ├─dao-gen-module
│ ├─dao-im-module
│ └─dao-user-module
├─common-framework-all
│ ├─framework-dynamic-datasource
│ ├─framework-easy-elasticsearch
│ ├─framework-elasticsearch
│ ├─framework-jpa
│ ├─framework-knife4j
│ ├─framework-mybatis-plus
│ ├─framework-nacos
│ ├─framework-rabbitmq
│ ├─framework-redis
│ ├─framework-seata
│ ├─framework-sharding-sphere
│ └─framework-weixin-java
├─common-module-all
│ ├─common-openfeign-module
│ ├─common-security-module
│ └─common-shiro-module
├─common-service-module-all
│ ├─gen-service-module
│ ├─im-service-module
│ ├─user-service-module
│ ├─validate-code-service-module
│ └─websocket-service-module
├─micro-service-module-all
│ ├─gateway
│ ├─gen
│ ├─im
│ ├─task
│ │ ├─quartz
│ │ └─xxl-job
│ ├─user
│ └─websocket
└─sql
minimalism pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.minimalism</groupId>
<artifactId>minimalism</artifactId>
<version>${project-module.version}</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<project-module.version>0.0.1-SNAPSHOT</project-module.version>
<project.Encoding>UTF-8</project.Encoding>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>${project.Encoding}</project.build.sourceEncoding>
<project.reporting.outputEncoding>${project.Encoding}</project.reporting.outputEncoding>
</properties>
<modules>
<module>common-base-all</module>
<module>common-framework-all</module>
<module>common-module-all</module>
<module>common-dao-module-all</module>
<module>common-service-module-all</module>
<module>micro-service-module-all</module>
</modules>
<!--远程仓库-->
<repositories>
<repository>
<id>aliyun-public</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<profiles>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
</project>
micro-service-module-all pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minimalism</groupId>
<artifactId>minimalism</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>micro-service-module-all</artifactId>
<packaging>pom</packaging>
<properties>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<alibaba-cloud.version>2021.0.5.0</alibaba-cloud.version>
<spring-boot.version>2.7.18</spring-boot.version>
</properties>
<modules>
<module>gateway</module>
<module>gen</module>
<module>im</module>
<module>websocket</module>
<module>task</module>
<module>user</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Spring-Boot Version BOM -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.Encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
websocket pom
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minimalism</groupId>
<artifactId>micro-service-module-all</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>websocket</artifactId>
<properties>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<alibaba-cloud.version>2021.0.5.0</alibaba-cloud.version>
<spring-boot.version>2.7.9</spring-boot.version>
<hutool.version>5.8.20</hutool.version>
<fastjson.version>2.0.32</fastjson.version>
<logstash.version>5.3</logstash.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Cloud Version BOM -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.minimalism</groupId>
<artifactId>websocket-service-module</artifactId>
<version>${project-module.version}</version>
</dependency>
<dependency>
<groupId>com.minimalism</groupId>
<artifactId>framework-knife4j</artifactId>
<version>${project-module.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
bootstrap.yml
spring:
application:
name: websocket
profiles:
active: @spring.profiles.active@
main:
allow-circular-references: true
jackson:
serialization:
FAIL_ON_EMPTY_BEANS: false
cloud:
nacos:
discovery:
service: ${spring.application.name}
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.username}
config:
server-addr: ${nacos.server-addr}
username: ${nacos.username}
password: ${nacos.username}
refresh-enabled: true
refreshable-dataids: ${spring.cloud.nacos.discovery.service:${spring.application.name}}-${spring.profiles.active:test}.${spring.cloud.nacos.config.file-extension:yaml}
server:
port: 18900
servlet:
context-path: /${spring.application.name}
############################################自定义############################################
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
logstash:
addr: 127.0.0.1:4560
file: var/log/${spring.application.name}/${spring.profiles.active}/${spring.application.name}.log
fileNamePattern: var/log/${spring.application.name}/${spring.profiles.active}/${spring.application.name}-logstash.%d{yyyy-MM-dd}.log
maxHistory: 30
totalSizeCap: 10MB
以上为本次演示的3层父子pom
效果图如下
演示视频
特点:采用 dependencyManagement 方案管理 可以统一springboot版本同时也可以在micro-service-module-all下的模块中使用不同的springboot版本 真正实现了 高内聚,低耦合
报错问题解决
如果你出现以下错误说明占位符无法识别
解决方案:
在你的结构中pom或父结构中pom(在父结构中加入其他子结构无需在加入了)加入以下配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>