maven 不同环境打包

时间:2023-01-17 09:59:44

在使用maven的过程中会发现一个问题,由于生产环境跟测试环境的配置不通,所以在分别打两个环境的包时,往往需要人工参与去修改配置文件,而人工参与的次数越大错误的几率就会越大,那maven能不能再不用人工修改配置文件的前提下来分别打两个环境的包呢,当然可以。

<!--也会供子项目继承-->
    <build>
        <!-- 插件管理,可供子项目继承 -->
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <resources>
            <resource>
                <directory>/Users/iss/sourceCode/gitProject/iss/maven-multi-module/core/src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
            <!--设置自动替换-->
            <resource>
                <directory>/Users/iss/sourceCode/gitProject/iss/maven-multi-module/core/src/main/resources</directory>
                <includes>
                    <include>jdbc.properties</include>
                </includes>
                <!--也可以用排除标签-->
                <!--<excludes></excludes>-->
                <!--开启过滤-->
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <!--<phase>clean</phase>-->
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo>Fruit:${fruit}</echo>
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


    <profiles>
        <profile>
            <id>product</id>
            <properties>
                <fruit>product</fruit>
            </properties>
            <build>
                <filters>
                    <filter>/Users/iss/sourceCode/gitProject/iss/maven-multi-module/filters/jdbc-product.properties</filter>
                </filters>
            </build>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <fruit>dev</fruit>
            </properties>
            <activation>
            <!-->默认是dev环境的<-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <filters>
                    <filter>/Users/iss/sourceCode/gitProject/iss/maven-multi-module/filters/jdbc-dev.properties</filter>
                </filters>
            </build>
        </profile>
    </profiles>

如果想要打生产环境的包

vn package  -Pproduct 

filter文件下包括2个配置文件
jdbc-dev.properties

jdbc.url=i am dev
jdbc.username=i am dev
jdbc.password=i am dev

jdbc-product.properties

jdbc.url=i am product
jdbc.username=i am product
jdbc.password=i am product

而resource目录下
jdbc.properties

jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}

maven在构建的时候会自动替换变量里的变量