前言

做一个项目呢,都需要开发/测试/生产这不同的环境吧. 不同的环境也就意味着数据库不一样,zk地址不一样,fastdfs地址不一样,redis地址不一样等等. 难道每次移交测试前,我都要把这些配置文件换个遍?maven profile就给我们提供了很大的方便.只需要引用不同的文件夹下即可. 让我带领大家进入maven profile的大门

真实使用场景

maven profile_Java

local本地/ beta联调/ test测试/等等.

在项目对应pom中,可以这么设置

<profiles>
        <profile>
            <id>local</id>
            <build>
                <resources>
                    <resource>
                        <directory>${profiles.dir}/local</directory>
                    </resource>
                </resources>
            </build>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

        <profile>
            <id>beta</id>
            <build>
                <resources>
                    <resource>
                        <directory>${profiles.dir}/beta</directory>
                    </resource>
                </resources>
            </build>
        </profile>

        <profile>
            <id>test</id>
            <build>
                <resources>
                    <resource>
                        <directory>src/profiles/test</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>prod</id>
            <build>
                <resources>
                    <resource>
                        <directory>${profiles.dir}/prod</directory>
                    </resource>
                </resources>
            </build>
        </profile>
        <profile>
            <id>schoolprod</id>
            <build>
                <resources>
                    <resource>
                        <directory>${profiles.dir}/schoolprod</directory>
                    </resource>
                </resources>
            </build>
        </profile>
    </profiles>

那么如何来激活profile呢,maven也是提供了多种方式

1.命令行,我们在jenkins自动化构建时,就是采用的这种方式

mvn clean install -P beta

如果你说,我有特殊情况,需要激活两个profile, 那么就这么输入: mvn clean install -P beta,test

2.settings文件显式激活

如果你希望local profile默认一直处于激活状态.那么就可以直接配置setting.xml文件的activeProfiles元素.

<settings>
   
     <activeProfiles>
     	<activeProfile>local</activeProfile>
     </activeProfiles>

 </settings>
3.对应pom文件显式激活

   我电脑上有很多的项目,我想对于个别项目激活local, 直接idea启动就走local, 那么就直接配置对应pom文件的activProfile元素

<profile>
            <id>local</id>
            <build>
                <resources>
                    <resource>
                        <directory>${profiles.dir}/local</directory>
                    </resource>
                </resources>
            </build>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
4.系统属性激活

  我想配置当某系统属性存在时,自动激活profile,

 <profiles>
    <profile>
        <activation>
                <property>
                	<name>test</name>
                </property>
        </activation>
    </profile>
</profiles>
可以进一步配置,当某系统属性test存在时,且值等于x的时候,激活profile

 <profiles>
    <profile>
        <activation>
                <property>
                	<name>test</name>
			<value>x</value>
                </property>
        </activation>
    </profile>
</profiles>
其实可以直接命令声明系统属性

mvn clean install -Dtest=x

5.根据操作系统激活(没搞明白, 路过的清楚可以指导我一下)

6.文件存在与否激活

我想根据某个文件存在与否来决定是否激活profile

 <profiles>
    <profile>
        <activation>
                <file>
                	<missing>x.properties</missing>
			<exists>y.properties</exists>
                </file>
        </activation>
    </profile>
</profiles>
这里如果想问,哪个级别最低,那么就是3了,默认激活的这个,只要我用上面其他哪个,3就不管用了.


profile种类 pom.xml: 当前项目

用户的setting.xml: 用户目录.m2/setting.xml profile对本机上该用户所有的maven项目有效

全局setting.xml: maven 安装目录下conf/setting.xml  对本机上所有maven项目有效