maven


1、Maven坐标(gav):用于去仓库获取jar包给项目构建使用

 注:如果groupId配置的目录名字中有"."点, 就代表多层目录

2、配置maven全局配置文件conf/settings.xml

2.1、自定义本地仓库路径:

D:\.m2\repository  

2.2、配置绑定远程仓库,阿里云仓库


  nexus
  * 
  http://maven.aliyun.com/nexus/content/groups/public/
	

2.3、配置全局的jdk编译语言级别版本(如果不配这个,默认编译级别是1.5,太低,idea运行的会有警告)


    development
    
      1.8
      true
    
    
      1.8
      1.8
      1.8
    

3、IDEA绑定Maven

 4、介绍pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>


  4.0.0

  
  javaee
  javaweb_archetype
  1.0-SNAPSHOT

  
  war

  


  
  
    
    UTF-8
    
    8
    8
  


  
  

    
    
      junit
      junit
      4.11
      test
    
 


  

5、Maven 构建生命周期

 

 6、Maven的依赖范围

jar的使用有三种不同的位置:编译位置(main),测试位置(test),运行时位置(target)

依赖范围关键字
  • compile:在所有范围(编译、测试和运行)都有效。如果没有配置scope,默认为compile,就是所有位置可用  
  • provided:设置jar包在主体main和测试test的位置编译可以使用,运行时不能使用,如 serlet和jsp ,因为在运行阶段tomcat上已经有了这个jar包。(避免冲突)
  • runtime:设置jar包在测试test和运行时可用,在主体main不可用,如mysql驱动包在main主体位置编译时不需要, 在target目录运行位置需要
  • test:只在测试阶段有效,如 junit;项目打包时就不会包含这个jar包

测试:配置junit的jar包的使用范围为test, 在main主体位置使用junit代码,发现不能使用

7、Maven处理文件的默认规则

① maven会把 src/main/resources 目录中的文件,拷贝到 target/classes 目录下

② maven只处理 src/main/java目录中的.java文件,把这些文件编译为.class文件,并拷贝到target/classes目录中。不处理其他文件

此时需要在pom.xml中加上以下配置:


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

再次编译后:

 8、profile标签的使用

实际开发中,多环境的配置非常常见。为了便于管理各种不同环境下的配置,这里可以借助Maven的profiles标签实现

①利用Maven处理文件的默认规则,可以打包指定的属性文件


        
        
            dev
            
            
                 
                dev
            
            
            
                true
            
        

        
        
            prod
            
                prod
            
        

 


    chain 
    
        
            src/main/java
            false
            
                **/profile-${current.env}.properties
            
        
    

这样,选择不同的profile,即会相应改变current.env属性的值。这样,在resource标签处通过引用该属性即可实现在不同的环境下只打包相应的文件。这里,我们以使用prod环境为例。可以看到其只会将 profile-prod.properties 文件打包进去,而不会打包profile-dev.properties文件。

 ② 也可以直接在profile标签下使用properties标签来定义不同环境下属性变量的值,然后直接在相应的资源文件直接引用相关的属性变量来实现多环境配置。例如下面的jdbc.properties文件中,引用了两个属性值——mysql.username、datasource.url

 
        chain 
        
            
                src/main/java
                
                true
                
                    **/jdbc.properties
                
            
        



        
        
            dev
            
            
                root
                jdbc:mysql://127.0.0.1
            
            
            
                true
            
        

        
        
            prod
            
                admin
                jdbc:mysql://12.34.56.78
            
        

这里,我们以使用prod环境为例。可以看到jdbc.properties文件中的引用变量已经被替换为prod环境中定义的属性值