maven资源文件的相关配置

没错, 这边我就是抄的,哈哈哈

背景:

最近在研究maven, 顺便研究一下资源文件配置

src/main/java和src/test/java

这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。

src/main/resouces和src/test/resources

这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。

target/classes

打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。

Maven项目的标准目录结构

资源文件的配置

资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。
最经常的一种配置方式是将配置文件中的占位符是否用maven中配置的属性替换

可以有两种方法:

  • 一是在元素下添加进行配置。
  • 另一种是在子元素中配置maven-resources-plugin等处理资源文件的插件。

    
        
            src/main/resources
            true
            
                context.xml
            
        

        
            src/main/resources
            false
            
                context.xml
            
        
    

配置中一共有两个resource,第一个resource配置是过滤src/main/resources目录下文件context.xml,若文件中有类似${key}这样的配置,就会根据maven的配置进行覆盖,让其使用真实值来填写,至于真实值如何来,后面会具体讲。

第二个resource配置是不过滤src/main/resources目录下除了context.xml的其他文件,也就不会用真实值来填写${key}这样的配置。

若是都存在的话,那就发生冲突了,这时会以为准。

也许有人会有疑问,若只需要过滤context.xml的话,那就只需要配置第一个resource就可以了吧。其实不然,若是只配置第一个resource,第二个不配置,那么当你运行maven打包操作后,你就会发现,在工程的classpath下只有context.xml文件了,其他配置文件都没有打过来。所以第二个resource是必不可少的,指明其他配置文件是不需要过滤的,但是同样需要打包到classpath下。

其实filtering为true的时候,这时只会把过滤的文件打到classpath下,filtering为false的时候,会把不需要过滤的文件打到classpath下。

还有一点需要说明,若都不配置,就是把directory下的所有配置文件都放到classpath下,若这时如下配置

参考博客:
https://www.cnblogs.com/dreamroute/p/6729147.html

你可能感兴趣的:(maven资源文件的相关配置)