需求:资源文件根据不同的环境进行拆分,打包的时候只想根据目标环境将需要的资源文件包含进去。具体的资源环境如下图所示。

解决方案:

  1. pom.xml文件配置

首先是在待打包的资源文件中排除掉application-*.yml,

复制代码

<resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>application-*.yml</exclude>
                <!--<exclude>dev/*</exclude>--><!--打包的时候排除特定文件下的文件-->
            </excludes>
        </resource>

复制代码

然后再另起一个resource配置节,指向相同的文件夹,再将需要的配置文件包含进去

复制代码

<resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.yml</include>
                <include>application-${project}*.yml</include>
            </includes>
        </resource>

复制代码

其中include节中*的意义表示通配符,如果想精确的打包某个yml文件,project变量保证全称即可,但是如果想打包pro开头的就设置project为pro就行了。

另外,默认情况下,要将所有的yml文件都build到target目录下,此时需要配置一个profile节,如下:

复制代码

<profile>
        <id>dev-default</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <project> </project>
        </properties>
    </profile>

复制代码

其中,project变量配置为空,这样配合resource节中的application-${project}*.yml配置,就会把application-开头的yml文件都build到指定的target文件夹下。

完整配置如下:

复制代码

<build>
    <finalName>webTrainUse</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!--fork : 如果没有该项配置devtools不会起作用,即应用不会restart -->
                <fork>true</fork>
                <addResources>true</addResources><!--支持静态文件热部署 -->
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>application-*.yml</exclude>
                <!--<exclude>dev/*</exclude>--><!--打包的时候排除特定文件下的文件-->
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.yml</include>
                <include>application-${project}*.yml</include> <!--注意这里有个通配符 -->
            </includes>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>

</build>
<!--定义打包环境变量,生产环境、测试环境、开发环境-->
<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <project>*</project><!--project为*,就可以将所有的yml文件都会build到指定的文件夹下-->
        </properties>
    </profile>
    
    <profile>
        <id>test</id>
        <properties>
            <project>test</project>
        </properties>
    </profile>
    <profile>
        <id>pro</id>
        <properties>
            <project>pro</project>
        </properties>
    </profile>
   
</profiles>

复制代码

2.mvn命令打包

mvn clean package -Ppro

其中-P后面的pro对应的是pom文件中profiles节中profile的id为pro的配置,其对应的project为produce,所以在下面的配置中的${project}就会被替换为

复制代码

<resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>application.yml</include>
                <include>application-${project}.yml</include>
            </includes>
        </resource>

复制代码

使用mvn的前提是配置好了MAVEN_HOME环境变量:

如果需要指定的maven配置文件,则mvn命令格式如下:

mvn clean –s D:\apache-maven-3.5.3\settings2.xml package –Ppro

打完包之后的文件目录如下:

idea中设置参数进行打包

Maven Projects窗口中,右键要打包的项目中的pacekage,在右键菜单中可以看到create***的选项,如下图:

点击该选项之后,首先编写一个Name名称,如pro-outer,然后在弹出的菜单中编写Command Line命令行参数,在输入框中增加-Ppro-outer,pro-outer就是pom中profile节中的id值,如下图:

然后点击该窗口的applay按钮,关闭该窗口,然后在idea的工具类中可以看到如下图所示的内容

点击运行按钮,则执行打包操作

注意:

多模块项目,注意profile的id名称不要重复,否则在idea开发环境下会出异常,解决方式是在idea的maven-project窗口的最上方的profile文件夹,勾选要build到target文件夹的资源文件

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐