当前位置: 代码网 > it编程>编程语言>Java > Maven 不同环境灵活构建的步骤

Maven 不同环境灵活构建的步骤

2024年10月27日 Java 我要评论
需求:使用 maven根据不同的构建环境(如开发、测试、生产)来定义不同的配置,实现灵活的构建管理。需要demo项目的可以参考:我的demo项目一、项目分层一般的初创项目不会有特别多的配置文件,所以使

需求:
使用 maven根据不同的构建环境(如开发、测试、生产)来定义不同的配置,实现灵活的构建管理。
需要demo项目的可以参考:我的demo项目

一、项目分层

一般的初创项目不会有特别多的配置文件,所以使用 spring.profiles.active就可以满足需求,但伴随项目规模扩大,引入的依赖/中间件越多,配置文件越多,仅仅靠单一的文件无法满足,可以参考下面的结构:

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── github
│   │   └── resources
│   │       ├── resources-env
│   │       │   ├── dev
│   │       │   └── prod
│   │       └── static

1. 使用 maven 配置不同环境

在 maven 中,<profiles> 是一个非常强大的功能,它允许你根据不同的构建环境(如开发、测试、生产)来定义不同的配置。在 pom.xml 文件中使用 <profiles>,可以对插件、依赖、属性等进行差异化配置,进而实现灵活的构建管理。

1.1 配置不同的环境

pom.xml配置如下:

<profiles>
  <!-- 本地开发 -->
  <profile>
    <id>dev</id>
    <properties>
      <env>dev</env>
    </properties>
    <activation>
      <activebydefault>true</activebydefault> <!-- 默认使用 dev -->
    </activation>
  </profile>
  <!-- 测试 -->
  <profile>
    <id>test</id>
    <properties>
      <env>test</env>
    </properties>
  </profile>
  <!-- 预发 -->
  <profile>
    <id>pre</id>
    <properties>
      <env>pre</env>
    </properties>
  </profile>
  <!-- 生产 -->
  <profile>
    <id>prod</id>
    <properties>
      <env>prod</env>
    </properties>
  </profile>
</profiles>

1.2 配置构建信息

pom.xml文件如下:

 <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources/resources-env/${env}</directory>
            <filtering>true</filtering> <!-- 启用资源过滤 -->
        </resource>
    </resources>

   
    <plugins>
      <!--     spring 配置文件可以使用占位符读取pom.xml中的变量 例如 @env@       -->
        <plugin>
            <groupid>org.apache.maven.plugins</groupid>
            <artifactid>maven-resources-plugin</artifactid>
            <version>3.2.0</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <usedefaultdelimiters>false</usedefaultdelimiters>
            </configuration>
        </plugin>
    </plugins>

 </build>

1.3 spring 配置文件激活不同环境的配置文件

application.properties 文件配置如下:

spring.profiles.active=@env@

1.4 构建项目

命令参考:

mvn clean package -pprod

二、可能遇到的问题

2.1 idea直接启动项目,读取不到环境配置文件

项目环境变量设置有问题。

解决方法:
idea 操作 file -> project structure -> modules 设置 resources 就可以了

在这里插入图片描述

2.2 启动项目,报错:ioexception: derinputstream.getlength()

错误原因是因为 <filtering>true</filtering> 会进行文件过滤,非纯文本文件(例如.p12二进制文件)需要进一步配置。

参考:

2.3 maven 打包缺少环境配置文件

spring 项目配置文件位置:

  • 默认 src/main/resources 目录下的文件
  • config 子目录下的配置文件

打包时需要进一步处理。

参考:进一步的,打包时时可以进一步优化,即开发环境,构建时只将测试资源文件打包到应用中,进一步提升项目的安全性。

 <!--    打包时将 将不同环境的配置文件复制到jar包中        -->
 <plugin>
     <groupid>org.apache.maven.plugins</groupid>
     <artifactid>maven-resources-plugin</artifactid>
     <version>3.2.0</version>
     <executions>
         <execution>
             <id>copy-resources</id>
             <phase>process-resources</phase>
             <goals>
                 <goal>copy-resources</goal>
             </goals>
             <configuration>
                 <outputdirectory>${project.build.outputdirectory}</outputdirectory>
                 <resources>
                     <resource>
                         <directory>src/main/resources/resources-env/${env}</directory>
                         <filtering>false</filtering>
                     </resource>
                 </resources>
             </configuration>
         </execution>
     </executions>
 </plugin>

<plugin>
   <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-jar-plugin</artifactid>
    <version>3.2.0</version>
    <configuration>
       	<!-- 环境隔离 排除不需要的文件-->
        <excludes>
            <exclude>resources-env/**</exclude>
        </excludes>
    </configuration>
</plugin>

三、进一步优化

3.1 缩小应用jar包的体积

伴随项目依赖越来越大,应用jar包的体积会越来越大,可以进一步优化。

参考:

到此这篇关于maven 不同环境灵活构建的步骤的文章就介绍到这了,更多相关maven 不同环境构建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com