maven根据不一样的运行环境,打包不一样的配置文件

使用maven管理项目中的依赖,很是的方便。同时利用maven内置的各类插件,在命令行模式下完成打包、部署等操做,可方便后期的持续集成使用。java

可是每个maven工程(好比web项目),开发人员在开发时,会使用一种配置文件,好比数据库配置,而测试环境可能使用另外一种配置文件。web

打包完成后,手动调整配置文件,工做重复度很高,所以查找方法,实现“maven根据不一样的运行环境,打包不一样的配置文件”的目的。数据库

按环境名称创建配置文件目录

在src/main/resources目录下面,按照环境名称创建配置文件目录。这里有两个环境:test、product。apache

同时发现test、product目录中的文件和目录以外的文件基本相同。这是为了方便开发人员本地开发时本地调试,因此没有创建dev环境的配置文件目录。maven

pom.xml中增长插件

主要关注标红的插件maven-resources-plugin,以及标红的配置部分。测试

注意:目前通过测试,发现resources目录文件拷贝会在validation阶段以后compile阶段以前执行,为了保证指定环境的配置文件在resources目录拷贝以后执行,使用compile阶段;overwrite设置为true,强制覆盖原有文件。ui

使用maven-resources-plugin插件,在compile阶段实现指定目录中配置文件的拷贝操做。url

<build>
    <finalName>Lantech</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!-- 不一样环境的配置文件选择 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
              <!-- 覆盖原有文件 -->
              <overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory> <!-- 也能够用下面这样的方式(指定相对url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> --> <!-- 待处理的资源定义 --> <resources> <resource> <!-- 指定resources插件处理哪一个目录下的资源文件 --> <directory>src/main/resources/${package.environment}</directory> <filtering>false</filtering> </resource> </resources> </configuration> <inherited></inherited> </execution> </executions> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>

pom.xml中增长profiles配置

使用profiles可为maven命令执行时,激活不一样的变量,并依据此变量同上述的插件配合,完成指定目录中配置文件拷贝操做。spa

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <package.environment>dev</package.environment>
        </properties>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <package.environment>test</package.environment>
        </properties>
    </profile>
    <profile>
        <id>product</id>
        <properties>
            <package.environment>product</package.environment>
        </properties>
    </profile>
</profiles>

执行打包命令

mvn clean package
mvn clean package -Pdev
mvn clean package -Ptest
mvn clean package -Pproduct

执行命令,指定-P参数,启用指定的profile。插件

默认的dev目录是不存在的,所以原有的配置文件不会被覆盖。当启动其余profile时,会覆盖原有的文件,实现不一样环境不一样配置文件的打包需求。

相关文章
相关标签/搜索