Maven源配置指导
代理仓库配置
<mirrors>
<!-- 配置阿里云代理仓库
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
-->
<!-- 配置个人私服 -->
<mirror>
<id>maven-public</id>
<mirrorOf>*</mirrorOf>
<url>https://test-mvc.kdaiyu.cn/repository/maven-public/</url>
</mirror>
</mirrors>
私服账号配置
<servers>
<!-- id的名字要和 distributionManagement 中repository的id一致 -->
<server>
<id>maven-releases</id>
<username>admin</username>
<password>8ee56366</password>
</server>
<server>
<id>maven-snapshots</id>
<username>dev</username>
<password>123456</password>
</server>
</servers>
配置构建插件
<build>
<resources>
<resource>
<filtering>true</filtering> <!-- 替换文件中的内容 -->
<directory>src/main/resources</directory>
<includes>
<!-- 配置文件全部放nacos配置中心,只保留程序启动连接nacos配置信息 -->
<include>bootstrap.yaml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${project.compiler.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<!-- maven进行配置信息替换时跳过文件类型 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>txt</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
替换配置文件内容,跳过install和deploy
<build>
<filters>
<!-- 按环境替换配置文件中的变量 -->
<filter>${basedir}/src/main/resources/bootstrap.yaml</filter>
</filters>
<plugins>
<!-- springboot 项目打包必备,不能删除 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
<!-- deploy 跳过,一般用在不需要部署到私服仓库的模块 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- install 跳过,一般用不需要安装到本地仓库的模块 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
完整的多模块,多环境配置示例
<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/maven-v4_0_0.xsd">
<name>kdaiyu-cloud</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.14</version>
<relativePath/>
</parent>
<modelVersion>4.0.0</modelVersion>
<modules>
<module>../kdaiyu-common</module>
<module>../kdaiyu-main</module>
<module>../kdaiyu-doctor</module>
<module>../kdaiyu-hospital</module>
<module>../kdaiyu-gateway</module>
<module>../kdaiyu-finance</module>
</modules>
<groupId>com.accurad.amol</groupId>
<artifactId>kdaiyu-cloud</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<!-- 按环境定义变量值 -->
<profiles>
<profile>
<!-- 本地开发环境,只替换配置信息,不做文件剔除 -->
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<springbooot.devtool.scope>runtime</springbooot.devtool.scope>
<spring.profiles.active>dev</spring.profiles.active>
<nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-DEV</nacos.namespace.id>
<kdaiyu.common.basic.version>1.0-SNAPSHOT</kdaiyu.common.basic.version>
<kdaiyu.common.api.version>1.0-SNAPSHOT</kdaiyu.common.api.version>
<kdaiyu.common.web.version>1.0-SNAPSHOT</kdaiyu.common.web.version>
<kdaiyu.common.entity.version>1.0-SNAPSHOT</kdaiyu.common.entity.version>
</properties>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</profile>
<profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<springbooot.devtool.scop>provided</springbooot.devtool.scop>
<spring.profiles.active>dev</spring.profiles.active>
<nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-DEV</nacos.namespace.id>
<kdaiyu.common.basic.version>1.0-SNAPSHOT</kdaiyu.common.basic.version>
<kdaiyu.common.api.version>1.0-SNAPSHOT</kdaiyu.common.api.version>
<kdaiyu.common.web.version>1.0-SNAPSHOT</kdaiyu.common.web.version>
<kdaiyu.common.entity.version>1.0-SNAPSHOT</kdaiyu.common.entity.version>
</properties>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<!-- 配置文件全部放nacos配置中心,只保留程序启动连接nacos配置信息 -->
<include>bootstrap.yaml</include>
</includes>
</resource>
</resources>
</build>
</profile>
<profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<springbooot.devtool.scop>provided</springbooot.devtool.scop>
<spring.profiles.active>prod</spring.profiles.active>
<nacos.namespace.id>NACOS-NAMESPACE-ID-kdaiyu-PRO</nacos.namespace.id>
<kdaiyu.common.basic.version>1.0-release</kdaiyu.common.basic.version>
<kdaiyu.common.api.version>1.0-release</kdaiyu.common.api.version>
<kdaiyu.common.web.version>1.0-release</kdaiyu.common.web.version>
<kdaiyu.common.entity.version>1.0-release</kdaiyu.common.entity.version>
</properties>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>bootstrap.yaml</include>
</includes>
</resource>
</resources>
</build>
</profile>
</profiles>
<!-- 全局公共配置 -->
<properties>
<kdaiyu.versoin>1.0</kdaiyu.versoin>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<project.compiler.plugin.version>3.8.1</project.compiler.plugin.version>
<aliyun-spring-boot.version>1.0.0</aliyun-spring-boot.version>
<spring-boot.version>2.6.14</spring-boot.version>
<spring-cloud.versoin>2021.0.8</spring-cloud.versoin>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
<hutool.version>5.8.18</hutool.version>
<mybatis-flex.version>1.5.6</mybatis-flex.version>
<mybatis.version>2.2.2</mybatis.version>
<maven.repository.url>https://test-mvc.kdaiyu.cn/repository</maven.repository.url>
<maven.test.skip>true</maven.test.skip>
<!-- nacos 配置,生产环境需要替换为有权限读写账号 -->
<nacos.user.name>nacos_dev</nacos.user.name>
<nacos.user.password>nacos_dev123</nacos.user.password>
<nacos.server.address>192.168.10.48:8848</nacos.server.address>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 只添加核心工具包,其他工具按需在子模块pom.xml中添加-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<!-- Java工具集:https://doc.hutool.cn/pages/index/ -->
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 管理版本依赖,此次写明版本号在子模块dependencies,子模块中按需引入 -->
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.versoin}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>${aliyun-spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 工具包,各种util包,参考文档 https://doc.hutool.cn/pages/index/ -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
<version>${hutool.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>${mybatis-flex.version}</version>
</dependency>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-processor</artifactId>
<version>${mybatis-flex.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>maven-public</id>
<url>${maven.repository.url}/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-public</id>
<url>${maven.repository.url}/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>maven-releases</id>
<url>${maven.repository.url}/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>${maven.repository.url}/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${project.compiler.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<!-- maven进行配置信息替换时跳过文件类型 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>txt</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置文件替换
## 除nacos配置以外走线上nacos配置中心,本地开发调试可在当前文件修改覆盖。
spring:
application:
name: @project.name@
profiles:
active: @spring.profiles.active@
cloud:
nacos:
server-addr: @nacos.server.address@
username: @nacos.user.name@
password: @nacos.user.password@
config:
file-extension: yaml
namespace: @nacos.namespace.id@
name: finance
group: FIN_GROUP
shared-configs: # 共享配置
- {data-id: kdaiyu-app.yaml, group: DEFAULT_GROUP, refresh: true}
# extension-configs: # 扩展配置
# - { data-id: finance-xxxx.yaml, group: FIN_GROUP, refresh: true }
discovery:
server-addr: @nacos.server.address@
namespace: @nacos.namespace.id@
group: kdaiyu_GROUP
Springboot构建依赖到外部
<!-- springboot 项目打包必备,默认打包到一个jar文件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
-->
<!-- 优化打包文件,将项目打包到lib, 配置文件到conf -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<!-- 将配置文件排除在jar包 -->
<excludes>
<exclude>*.properties</exclude>
<exclude>*.yaml</exclude>
<exclude>*.xml</exclude>
<exclude>*.txt</exclude>
</excludes>
<archive>
<!-- 生成的jar中,包含pom.xml和pom.properties这两个文件 -->
<addMavenDescriptor>true</addMavenDescriptor>
<!-- 生成MANIFEST.MF的设置 -->
<manifest>
<!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库 下面可能会有多个包,并且只有一个是正确的,
其余的可能是带时间戳的,此时会在classpath下面把那个带时间戳的给添加上去,然后我们 在依赖打包的时候,
打的是正确的,所以两头会对不上,报错。 -->
<useUniqueVersions>false</useUniqueVersions>
<!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
<addClasspath>true</addClasspath>
<!-- MANIFEST.MF 中 Class-Path 各个依赖加入前缀 -->
<!--这个jar所依赖的jar包添加classPath的时候的前缀,需要 下面maven-dependency-plugin插件补充-->
<!--一定要找对目录,否则jar找不到依赖lib,前边加../是因为jar在bin下,而bin与lib是平级目录-->
<classpathPrefix>../lib</classpathPrefix>
<!--指定jar启动入口类 -->
<mainClass>cn.kdaiy.admin.AdminApplication</mainClass>
</manifest>
<manifestEntries>
<!-- 假如这个项目可能要引入一些外部资源,但是你打包的时候并不想把 这些资源文件打进包里面,这个时候你必须在
这边额外指定一些这些资源文件的路径,假如你的pom文件里面配置了 <scope>system</scope>,就是你依赖是你本地的
资源,这个时候使用这个插件,classPath里面是不会添加,所以你得手动把这个依赖添加进这个地方 -->
<!--MANIFEST.MF 中 Class-Path 加入自定义路径,多个路径用空格隔开 -->
<!--此处resources文件夹的内容,需要maven-resources-plugin插件补充上-->
<Class-Path>../conf</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- 拷贝依赖到 lib 目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<!-- 复制配置文件 -->
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<!-- 注意:不要用src/main/resources,maven编译时可能有修改配置文件的动作,如修改profile -->
<directory>${project.build.directory}/classes</directory>
<includes>
<!--将如下格式配置文件拷贝,maven-jar-plugin插件排除的内容需要放在外部的配置文件 -->
<include>*.properties</include>
<include>*.yaml</include>
<include>*.xml</include>
<include>*.txt</include>
</includes>
</resource>
</resources>
<!--输出路径-->
<outputDirectory>${project.build.directory}/conf</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
- 打包后的目录结构如下,可以结合run.sh编写启动命令,通过参数指定外部配置。java -jar .\lib\xxx.jar --spring.config.location=./conf/application.yaml
target/
├── bin/
│ └── start.sh
├── conf/
│ └── application.yaml
├── lib/
│ ├── your-app.jar
│ └── *.jar (其他依赖)