欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

maven基础--(4)--maven profile多环境自动切换配置,配置分离,排除文件

程序员文章站 2024-02-08 21:48:22
...

痛点:

  在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同。

  在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部署到相应的环境上。

  但是这样很容易出现问题,因为很容易出现少改或者漏改,造成不必要的麻烦

幻想:

  要是有一种东西,能让我们打war的时候指定一个参数,就能自动把项目编译成对应环境的war,那该有多幸福啊!!!

结果:这样的东西还真有,那就是maven-profile

一、项目src/main/resources目录下建立相对应的目录

比如笔者的

maven基础--(4)--maven profile多环境自动切换配置,配置分离,排除文件

 我建立了三个目录,分别是:dev,test,pro分别表示开发环境,测试环境,生产环境。当然还可能有更多的环境。针对不同的环境,我们的配置文件可能会有不同的设置,比如我的需求是,三个环境的项目常量设置,数据库连接设置,log设置都可能不同。

那我就分别在三个文件中配置了不同设置,在外面也有三个相对应的文件,其实在开发的过程中外面的三个和dev里面的三个应该是相同的。

公共配置直接放到src/main/resources下

二、POM中的配置

<profiles>
    <!--本地开发环境-->
    <profile>
        <id>dev</id>
        <properties>
            <profiles.active>dev</profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <profiles.active>test</profiles.active>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>pro</id>
        <properties>
            <profiles.active>pro</profiles.active>
        </properties>
    </profile>
</profiles>

<!--build部分-->
<build>
    <finalName>xxx</finalName>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>

            <!--项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定-->
            <directory>${project.basedir}/src/main/resources</directory>
            <excludes>
                <exclude>dbpool/**</exclude>
                <exclude>dev/*</exclude>
                <exclude>mbg/*</exclude>
                <exclude>pro/*</exclude>
                <exclude>test/*</exclude>
                <exclude>readme.txt</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>${project.basedir}/src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <!--是否替换资源中的属性-->
            <filtering>true</filtering>
        </resource>
    </resources>
    ...
</build>

3~26:我们设置了三个profile分别对应目录中的三个开发环境。

8~10:开发环境是默认**的(activeByDefault为true),这样如果在不指定profile时默认是开发环境

34~44:项目的默认资源目录,但是要排除不必要的文件,想要指定加入的再下面的resource指定

45~48:根据当前**的profile来把指定的配置文件加载到classpath下!!桥黑板:filtering标签一定要有,他的作用就是把src/main/resources的文件替换为dev|test|pro下的文件。(47行)

三、项目编译生成

所有需要的配置就完成了,通过在运行maven命令时指定不同的profile即可构建不同环境需要的war包或发布到不同的环境了 。如:

clean package -Ppro即构建出生产环境需要的war包

由于默认的profile是dev,所以如果我们不指定profile,那么加载就是开发环境dev下的配置文件了。即我们在本地开发测试时,不用关心profile的问题。

双击666,可以愉快的开发了,环境切换,游刃有余。

更详细的介绍:http://maven.apache.org/pom.html#Profiles

 

新增笔记:

在idea中设置maven执行命令,若找不到,路径如下:File->Settings->Keymap->Main menu->Run->Edit Confiturations...也可以自己添加一个快捷键,其实就在我们运行tomcat的的那个下拉按钮下。eclipse的请自行百度 “eclipse执行maven命令

maven基础--(4)--maven profile多环境自动切换配置,配置分离,排除文件

maven基础--(4)--maven profile多环境自动切换配置,配置分离,排除文件

选好项目目录,配置好Commang line。然后,我们打包的时候就可以点击上面的运行按钮了,愉快的不要不要的。

题外话:在使用maven-3.3.3的打包的时候,有时候会出现如下错误

ATAL ERROR in native method: JDWP on raw monitor enter, jvmtiError=JVMTI_ERROR_INVALID_ENVIRONMENT(116) 
JDWP exit error JVMTI_ERROR_WRONG_PHASE(112): on getting class status [../../../src/share/back/util.c:1265] 
JDWP exit error JVMTI_ERROR_INVALID_ENVIRONMENT(116): on raw monitor enter [../../../src/share/back/util.c:1034] 
ERROR: JDWP unable to dispose of JVMTI environment: JVMTI_ERROR_INVALID_ENVIRONMENT(116) 

 

 其实不影响项目的打包,这是maven,或者是jvm的bug,比如

笔者在更换至maven-3.5.0之后,问题解决!

四:排除WEB-INF下面的文件


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <warSourceExcludes>WEB-INF/list.html</warSourceExcludes>
    </configuration>
</plugin>

看这里,看这里

文章总目录:博客导航


码字不易,尊重原创,转载请注明:https://blog.csdn.net/u_ascend/article/details/80485917

相关标签: maven profile