您当前的位置: 首页 >  maven

liaowenxiong

暂无认证

  • 3浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Maven的resources插件配置详解(含过滤器的配置详解)

liaowenxiong 发布时间:2022-01-26 11:51:04 ,浏览量:3

文章目录
  • 指定配置文件所在的目录
  • 使用 excludes 元素可以排除指定的配置文件
  • 使用 includes 元素可以指定要处理的文件
  • 处理测试资源
  • 过滤器配置
resources 插件,负责将配置文件复制到编译目录中。Maven Java Web 项目默认的编译目录 target/classes

两种配置文件 src/main/resources、src/test/resources,Maven 默认只关注 src/main/resources 目录下的配置文件,其他目录下的配置文件会被忽略。

在这里插入图片描述

指定配置文件所在的目录

如果有配置文件不在 resources 目录下,这个时候就需要指定配置文件所在的目录:


	
	    
		${user.home}/antx.properties 
	 
  	
    
    
      
        src/main/java
      
      
      true 
    
  	

使用 excludes 元素可以排除指定的配置文件

  
    
      src/main/java
    
    
    
      **/*.txt
    
  

使用 includes 元素可以指定要处理的文件

  
    
      src/main/java
    
    
    
      **/*.txt
    
  

处理测试资源

处理测试资源,其实就是默认处理 src/test/resources 下的资源,需要在 pom.xml 中配置如下:

 
        
            
                src/main/resources/${fileName}.properties
            
        
        
            
                src/main/resources
                true
            
        
        
            
            	
                src/test/resources
            
        

打开命令终端,切换到 pom.xml 文件所在的目录下,执行下面的指令:

[~/documents/IdeaProjects/demo02]$ mvn resources:testResources
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------------------------------
[INFO] Building demo02 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-cli) @ demo02 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.893 s
[INFO] Finished at: 2022-01-26T20:43:22+08:00
[INFO] ------------------------------------------------------------------------

我们再看看 target 目录下有什么内容:

[~/documents/IdeaProjects/demo02]$ ls target
test-classes

如上查询结果可知,执行 mvn resources:testResources 会产生一个 test-classes 目录,src/test/resources 目录下的资源文件会复制到 test-classes 目录下。

过滤器配置

~/test.properties 文件中的内容:

name=liaowenxiong

src/main/java/test.txt 配置文件中的内容如下:

您好 ${name}

${属性名/变量名},表示获取对应属性/变量的值。

pom.xml 配置过滤文件,资源中启用过滤器:


    
        
        
            ${user.home}/test.properties
        
    
    
        
            
            
                src/main/java
            
            
            
                true
            
        
    

执行下面的命令处理资源文件:

[~/documents/IdeaProjects/demo02]$ mvn resources:resources
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------------------------------
[INFO] Building demo02 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.976 s
[INFO] Finished at: 2022-01-26T18:31:29+08:00
[INFO] ------------------------------------------------------------------------

执行上述的命令之后,Maven 会将指定目录下的资源文件复制到编译输出目录(target/classes)下,并且资源文件 src/main/java/test.txt 中的 ${name} 会替换成过滤文件中的对应属性的值,过滤文件中含有属性 name,其值为 liaowenxiong,所以就将 ${name} 替换成 liaowenxiong,因此进入 target/classes 目录下,打开 test.txt 文件,会看到以下的内容:

您好 liaowenxiong

举个典型的应用场景: 开发环境和测试环境的数据库连接参数不同,你可以创建两份文件数据库参数文件(properties 文件),然后再创建一份真正需要代码解析的数据库配置文件(properties 文件或者 xml 文件)。

开发环境下的数据库参数文件 db1.properties 内容如下:

url=jdbc:mysql://192.168.200.123:3306/dev
username=root
password=123

测试环境下的数据库参数文件 db2.properties 的内容如下:

url=jdbc:mysql://192.168.200.124:3306/test
username=root
password=456

数据库配置文件 db.properties 的内容如下:

driverClassName=com.mysql.jdbc.Driver
# 如果是数据库在本地,且端口号是3306,则可以简写成:jdbc:mysql:///test
url=${url}
userName=${userName}
password=${password}
# 连接池初始化时会生成5个连接对象
initialSize=5
maxActive=10
maxWait=3000

我把三份属性文件都放在 src/main/resources 目录下,如下图所示: 在这里插入图片描述 pom.xml 配置内容如下:


        
        	
            
                src/main/resources/${fileName}.properties
            
        
        
            
                src/main/resources
                
                true
            
        
    

打开命令终端,切换到 pom.xml 所在的目录下,执行下面的命令:

[~/documents/IdeaProjects/demo02]$ mvn resources:resources -DfileName=db1
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------------------------------
[INFO] Building demo02 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.948 s
[INFO] Finished at: 2022-01-26T20:25:49+08:00
[INFO] ------------------------------------------------------------------------

在命令终端查看生成的数据库配置 db.properties 文件:

[~/documents/IdeaProjects/demo02]$ cat target/classes/db.properties
driverClassName=com.mysql.jdbc.Driver
# 如果是数据库在本地,且端口号是3306,则可以简写成:jdbc:mysql:///test
url=jdbc:mysql://192.168.200.123:3306/dev
userName=root
password=123
# 连接池初始化时会生成5个连接对象
initialSize=5
maxActive=10
maxWait=3000

上述可以看到,属性 url、userName、password 的值全部替换成 db1.properties 文件中对应属性的值。

执行 mvn resources:resources时,如果指定变量 fileName=db2,看看效果如何:

[~/documents/IdeaProjects/demo02]$ mvn resources:resources -DfileName=db2
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------------------------------
[INFO] Building demo02 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ demo02 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.950 s
[INFO] Finished at: 2022-01-26T20:31:05+08:00
[INFO] ------------------------------------------------------------------------

在命令终端查看生成的数据库配置 db.properties 文件:

[~/documents/IdeaProjects/demo02]$ cat target/classes/db.properties      
driverClassName=com.mysql.jdbc.Driver
# 如果是数据库在本地,且端口号是3306,则可以简写成:jdbc:mysql:///test
url=jdbc:mysql://192.168.200.124:3306/test
userName=root
password=456
# 连接池初始化时会生成5个连接对象
initialSize=5
maxActive=10
maxWait=3000                                                                                                                                                                                       

上述可以看到,属性 url、userName、password 的值全部替换成 db2.properties 文件中对应属性的值。

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0442s