SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

1,问题描述

(1)默认 Spring Boot 项目结构,资源文件放置在 src/main/resources 中,测试的资源文件在 src/test/resources 中。

src/main/resources 与 src/test/resources 的区别:

  • src/main/java 里面的 java 文件只能直接加载 src/main/resources 下的资源,不能直接加载 src/test/resources 下的资源;
  • src/test/java 里面的 java 文件既能加载 src/test/resources 下的资源,又能加载 src/main/resources 下的资源,当两个 resources 下都有要加载的同名资源时候,优先选择 src/test/resources 下的资源。

原文:SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

(2)将项目打包后,解压 jar 可以发现原先 src/main/resources 目录下的资源文件已经被打包进来了:

原文:SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

(3)但有时我们的资源文件并不一定是放在 src/main/resources 目录下,比如我的项目通常会将资源文件放在 src/test/resources 目录下:

原因:根据实践经验表明,测试完后的配置项是最完整的,且经常会忘记替换正式版参数,因而选择将配置文件全部放置在 src/test/resources 目录下。

原文:SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

(4)又比如 mybatis 的 mapper.xml 文件,我们习惯把它和 Mapper.java 放一起

原文:SpringBoot - resource资源文件的打包配置详解(指定资源文件位置)

(5)但上面这两种情况的资源文件,在使用 maven 打包时是不会被打包进 jar 的。这时候我们便要指定需要打包的资源文件,这个有如下两种方法可以实现。

2,使用 标签

(1) 标签位于 标签内,用于指定项目资源文件的位置。比如下面配置我们指定了 src/test/resources 也是资源文件目录:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    
    
    
        
            src/test/resources
        
        
            src/main/resources
        
    


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    
    
    
        
            src/test/resources
        
        
            src/main/resources
        
    

(2)而对于写在包下的 Mapper.xml 文件,我们则可以通过如下配置指明资源文件位置:

提示:其中 */ 这样的写法,是为了保证各级子目录下的资源文件被打包。


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    
    
    
        
            src/main/java
            
                **/*.xml
            
        
        
            src/main/resources
        
    

(3)我们还可以通过 excludes 标签剔除不需要的资源:


    .......
    
        
            src/main/resources
            
                **/*.properties
                **/*.xml
            
            false
        
        
            src/main/java
            
                **/*.properties
                **/*.xml
            
            false
        
    
    ......

3,使用 maven-resources-plugin 插件

(1)除了使用 标签外,我们也可以使用 maven-resources-plugin 插件实现同样的目的。比如下面配置把 src/test/resources 目录下的资源文件打包到 classes 目录下:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
            org.apache.maven.plugins
            maven-resources-plugin
            
                
                    my-resources
                    process-resources
                    
                        copy-resources
                    
                    
                        ${basedir}/target/classes
                        
                            
                                ${basedir}/src/test/resources
                                
                                    *.properties
                                    *.xml
                                
                            
                        
                    
                
            
        
    

(2)而对于写在包下的 Mapper.xml 文件,我们也可以通过 maven-resources-plugin 插件将其打包到相应位置:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
            org.apache.maven.plugins
            maven-resources-plugin
            
                
                    copy-xmls
                    process-sources
                    
                        copy-resources
                    
                    
                        ${basedir}/target/classes
                        
                            
                                ${basedir}/src/main/java
                                
                                    **/*.xml
                                
                            
                        
                    
                
            
        
    

(3)使用 maven-resources-plugin 插件时,我们同样可以通过 excludes 标签剔除不需要的资源:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
            org.apache.maven.plugins
            maven-resources-plugin
            
                
                    my-resources
                    process-resources
                    
                        copy-resources
                    
                    
                        ${basedir}/target/classes
                        
                            
                                ${basedir}/src/test/resources
                                
                                    **/*.*
                                
                                
                                    log4j2-spring.xml
                                
                            
                        
                    
                
            
        
    


你可能感兴趣的:(SpringBoot - resource资源文件的打包配置详解(指定资源文件位置))