5. Maven属性与Profile

5. Maven属性与Profile,第1张

5. Maven属性与Profile

项目基于spring框架开发时需要引入大量的spring模块,例如core、beans、context、jdbc等,在引入上述模块时所用的都是同一个版本的模块,此时我们会定义一个maven属性来处理这种应用场景。但maven的属性还有更多应用场景。

Maven属性分类

内置属性、pom属性、自定义属性、Settings属性、Java系统属性、环境变量属性

内置属性

内置属性主要就两个,一个是basedir表示项目的根目录,另一个是version表示项目版本

POM属性

用户可以使用该类属性引用pom文件中对应的元素的值,比如project.version就是取pom文件中标签下的值。

常用的pom属性包括:

属性名称

说明

project.build.sourceDirectory

项目的源码目录

project.build.testSourceDirectory

项目的测试源码目录

project.build.directory

项目构建输出目录,默认为 target

project.outputDirectory

项目主代码编译输出的目录,默认为 target/classes

project.testOutputDirectory

项目测试代码编译输出的目录,默认为 target/test-class

自定义属性

通过标签定义的属性


	2.0
	2021.12.29
	UTF-8
	UTF-8
	1.8
	2.3.2.RELEASE
	Hoxton.SR9
	2.2.6.RELEASE
	2.0.1.Final
	6.2.0.Final
	0.9.1
	3.4.3.1
	1.2.78
	5.7.7
	1.10
	2.2.0
	4.5.13

Settings属性

用户以settings开头的属性引用settings.xml配置文件中xml元素的值。如settings.localRepository指向用户本地仓库的地址

Java系统属性

所有的Java系统属性都可以使用Maven属性引用。如user.home指向用户目录,可以使用mvn help:system查看所有的Java系统属性

环境变量属性

环境变量属性引用使用env开头。例如env.JAVA_HOME表示JAVA_HOME环境变量的值。

和Java系统属性一样,也可以通过mvn help:system查看

Maven Profile使用

我们在项目中定义的Pom实际都继承自pom根文件

根文件存放位置:

解压 apache-maven-3.8.1/lib/maven-model-builder-3.8.1.jar

maven-model-builder-3.8.1/org/apache/maven/model/pom-4.0.0.xml







  4.0.0

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
    
  

  
    
      central
      Central Repository
      https://repo.maven.apache.org/maven2
      default
      
        false
      
      
        never
      
    
  

  
    ${project.basedir}/target
    ${project.build.directory}/classes
    ${project.artifactId}-${project.version}
    ${project.build.directory}/test-classes
    ${project.basedir}/src/main/java
    ${project.basedir}/src/main/scripts
    ${project.basedir}/src/test/java
    
      
        ${project.basedir}/src/main/resources
      
    
    
      
        ${project.basedir}/src/test/resources
      
    
    
      
      
      
        
          maven-antrun-plugin
          1.3
        
        
          maven-assembly-plugin
          2.2-beta-5
        
        
          maven-dependency-plugin
          2.8
        
        
          maven-release-plugin
          2.5.3
        
      
    
  

  
    ${project.build.directory}/site
  

  
    
    
      release-profile

      
        
          performRelease
          true
        
      

      
        
          
            true
            maven-source-plugin
            
              
                attach-sources
                
                  jar-no-fork
                
              
            
          
          
            true
            maven-javadoc-plugin
            
              
                attach-javadocs
                
                  jar
                
              
            
          
          
            true
            maven-deploy-plugin
            
              true
            
          
        
      
    
  


profile使用场景

多环境支持(开发、测试、预生产、生产)

profile使用方法

  1. 定义一个配置文件,应用profile中定义的属性
driver=${driver}
url=${url}
user=${user}
password=${password}

profile中定义的属性properties名要与 *.properties 中定义的一致


	dev
	
		false
	
	
		com.mysql.jdbc.Driver
		jdbc:mysql://localhost:3306/dev
		root
		123456
	
  1. 定义profile,并激活指定的profile
	false
  1. 开启资源过滤

	${basedir}/src/main/resources
	true
  1. 编译测试
  2. 查看编译后的资源文件

profile的激活方式

命令行方式激活

mvn install -Pdev,test

  • 在settings文件中激活
    	dev
    

  • 系统属性激活
    	
    		test
    		123
    	
    

  • 操作系统环境激活
    	
    		Windows 10
    	
    

  • 文件存在激活
    	
    		aaa.properties
    	
    

  • 默认激活
        true
    

    profile的种类

    1. pom.xml
    2. 用户settings.xml全局settings.xml

    profile使用完整示例

    场景描述:例如我们有两套环境的数据库配置(dev、prod),里面的连接串账户不一样,那么我们需要建立多个配置文件进行区分,假如我们使用了profile仅需建立一个配置文件即可

    db.properties

    driver=${driver}
    url=${url}
    user=${user}
    password=${password}

    pom.xml

    
    
        4.0.0
    
        com.little
        LearnMavenMaster
        1.0.0
        jar
    
        
            8
            8
        
    
        
            
                junit
                junit
                4.12
                test
            
        
    
        
            
                dev
                
                    false
                
                
                    com.mysql.jdbc.Driver
                    jdbc:mysql://localhost:3306/dev
                    root
                    123456
                
            
            
                prod
                
                    true
                
                
                    com.mysql.jdbc.Driver
                    jdbc:mysql://localhost:3306/prod
                    root
                    root
                
            
        
        
            
                
                    ${basedir}/src/main/resources
                    true
                
            
            
                
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    2.0.2
                    
                        1.8
                        1.8
                        UTF-8
                    
                
                
                
                    org.apache.maven.plugins
                    maven-surefire-plugin
                    2.18.1
                    
                        true
                    
                
            
        
    

    测试代码

    Properties properties = new Properties();
    properties.load(HelloWorld.class.getClassLoader().getResourceAsStream("db.properties"));
    for (Map.Entry item : properties.entrySet()) {
    	System.out.printf("%s = %s%n", item.getKey(), item.getValue());
    }
    
    
    // output
    // user = root
    // password = root
    // url = jdbc:mysql://localhost:3306/prod
    // driver = com.mysql.jdbc.Driver

    查看编译后的文件

    欢迎分享,转载请注明来源:内存溢出

    原文地址: https://outofmemory.cn/zaji/5719819.html

  • (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-12-18
    下一篇 2022-12-18

    发表评论

    登录后才能评论

    评论列表(0条)

    保存