效果:在idea的maven tab页可以根据环境选择打包。不需要手动更改application里的spring.profile.active配置;lib依赖包外置,减少jar体积,config包外置,便于线上修改配置
resource文件夹
- application.yml
- application-dev.yml
- application-prod.yml
- application-test.yml
pom文件配置
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
<!--测试环境-->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
</profiles>
pom文件配置完会在这边显示
application文件的配置
spring:
profiles:
active: @profiles.active@
上述配置好,就可以通过maven来切换环境了
下面来配置打包
pom文件
<build>
<!-- 生成的文件名 -->
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/resources</directory>
<!--开启过滤 排除指定文件打包-->
<filtering>true</filtering>
<!-- 排除directory指定目录下的以下文件 -->
<excludes>
<exclude>application-dev.yml</exclude>
<exclude>application-druid.yml</exclude>
<exclude>application.yml</exclude>
</excludes>
</resource>
<!-- 指定生成到classes文件夹的配置文件 这里一定要配置,否则idea本地启动就启动不了 -->
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>application-${profiles.active}.yml</include>
<include>application.yml</include>
</includes>
</resource>
<!-- 复制application公共配置文件到config文件夹 -->
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<targetPath>${project.build.directory}/config</targetPath>
<includes>
<include>application.yml</include>
</includes>
</resource>
</resources>
<plugins>
<!-- springboot maven打包插件 repackage成可执行jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<mainClass>com.hy.HyOpenAPIApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 资源文件maven 打包 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>i18n/*</include>
<include>application-${profiles.active}.yml</include>
</includes>
</resource>
</resources>
<outputDirectory>${project.build.directory}/config</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 打包成jar包的maven插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<!-- 指定入口函数 -->
<mainClass>com.hy.HyOpenAPIApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<!--不打入jar包的文件类型或者路径-->
<excludes>
<exclude>**/*.yml</exclude>
</excludes>
</configuration>
</plugin>
<!-- 打包成war包的maven插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
这样配置好,就可以达到所要求的效果了
生成的打包目录:
target:
- config
- lib
- xxx.jar