maven

1.maven的作用

参考地址:http://maven.apache.org/index.html

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

Apache Maven是一个软件项目管理和管理工具。基于项目对象模型(POM)的概念,Maven可以中心化管理项目的构建、报告和文档。

2.下载和安装

下载地址:http://maven.apache.org/archetype/download.cgi

安装 :
注意:在maven安装之前,一定要已经安装了jdk。
只需要将maven所在的目录的bin文件夹配置到Path环境变量中,这样做的目的是在命令行的任意目录下,都可以使用mvn命令来操作。

新增环境变量MAVEN_HOME,类比JAVA_HOME,把maven所在的目录配置到这个MAVEN_HOME中
需要把maven目录的bin的目录下下配置到Path环境变量中,添加%MAVEN_HOME%/bin;

3.maven的配置

配置文件一般在maven的目录下的config的目录中,有个setting.xml,这里是全局的配置
但是也可以是在仓库下的setting.xml,默认是没有这个文件,可以拷贝maven的目录下的config的配置文件到仓库下的setting.xml

默认的加载顺序如下:

image.png

4.maven的目录结构

image.png

bin目录:包含了maven运行的一些命令脚本
boot目录:包含的是类加载器的一些东西
conf目录:configuration配置的,保存一些配置文件的
lib目录:保存jar包的

5.maven项目目录结构

项目目录结构,实际上指的是maven要求你的项目必须的一个目录层次。
约定优于配置 (Convention Over Configuration)
要去使用maven帮你进行jar包的管理,以及项目的构建和管理等等,你就要遵循maven的规定/约定
maven要求的你的工程结构必须是哪样哪样的。

image.png

6.maven配置文件之settings.xml

该文件是maven的全局配置文件

mirrors标签,表示配置镜像所在的路径的

一方面国外镜像的地址下载速度比较慢,所以可以考虑国内镜像的地址,比如阿里云的。
下面就配置几个镜像,第一个为阿里云的镜像地址

  
          alimaven  
          aliyun maven  
          http://maven.aliyun.com/nexus/content/groups/public/  
          central          
         
        
            ui
            central
            Human Readable Name for this Mirror.
            http://uk.maven.org/maven2/
        
        
            osc
            central
            http://maven.oschina.net/content/groups/public/
        
        
            osc_thirdparty
            thirdparty
            http://maven.oschina.net/content/repositories/thirdparty/
        
localRepository

表示配置仓库的地址
默认路劲下是${user.home}/.m2/repository的地址,就是用户目录下的.m2/repository的地址,如果需要变更,可以指定变更的地址

如果一个jar包已经在本地仓库中有了,注意这个jar包版本一定是要一致的才算有了,如果版本不一致,不能算作有,比如版本3.8.1,3.8.2算不同的jar,如果你自己上传jar到私服了,但是jar有更新了,再次上传到私服中,此时本地仓库的jar不会再更新,需要删除本地的jar,重新拉取最新的远程仓库的jar

其他如果有了,那么就不会再次去重复下载。

  
  D:\repository
interactiveMode

标识maven是否需要和用户交互以获得输入
如果maven需要和用户交互以获得输入,那么则设置成true,不然则设置为false

offline

标识maven是否需要在离线模式下运行

pluginGroups

当插件的组织id(groupId)没有显示提供时,供搜寻插件组织Id的列表

proxies

用来配置不同的代理的

servers

仓库的下载和部署是在pom.xml文件中进行定义的。比如说用户名,密码需要访问远程仓库的时候,有时候需要安全认证,这个认证就可以配置在servers标签中

  
    
      nexus-snapshots
      admin
      admin123
    
  
profiles

根据环境参数来调整构建配置的列表

7. maven配置文件之pom.xml

先给出一个缩减版的pom的基本配置



    4.0.0

    com.gp.springmvc
    sunkang-springmvc
    pom
    1.1-SNAPSHOT
    sunkang出品
    
        sunkang-web
        sunkang-dal
        sunkang-biz
    

    
        ${project.version}
        4.3.7.RELEASE
        1.3.0
        UTF-8
        UTF-8
        UTF-8
        1.8
        UTF-8
    

    
        
            
                com.gp.springmvc
                sunkang-common-lib
                ${project-version}
            
            
                com.gp.springmvc
                sunkang-dal
                ${project-version}
            
            
                com.gp.springmvc
                sunkang-biz
                ${project-version}
            
          
            
            
                org.springframework
                spring-context
                ${org.springframework-version}
                
                    
                    
                        commons-logging
                        commons-logging
                    
                
            
            
                org.springframework
                spring-webmvc
                ${org.springframework-version}
            
            
                org.springframework
                spring-tx
                ${org.springframework-version}
            
            
                org.springframework
                spring-jdbc
                ${org.springframework-version}
            
            
                org.springframework
                spring-test
                ${org.springframework-version}
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    ${java.version}
                    ${java.version}
                    ${java.encoding}
                    
                        lib
                    
                
            
        
    


groupId,artifactId,version

由groupId,artifactId,ersion所组成的就可以唯一确定一个项目,三个标签是必填标签
groupId标识的项目组(填写公司的域名反写)
artifactId项目名称
version版本号

dependencies

这个标签就是用来配置我们项目中具体需要哪些jar包

properties

用来定义pom中的一些属性的,一般指定版本号

build

指定如何构建当前项目的,下面可以有资源标签和插件标签
source: 指定了当前构建的source目录
plugin: 指定了进行构建时使用的插件

packging

指定当前构建项目的类型
类型可以为war,jar,pom
指定为pom类型,说明这个项目包含多个子模块,需要定义父pom的打包类型为pom

modules

表明定义了哪些子模块

dependencyManagement

依赖管理,主要是在父pom声明需要用到的依赖,然后子pom再去引用这里声明的依赖,这样就不需要指明版本号
只能出现在父pom
统一版本号
声明依赖的jar(子POM里用到再引用)

dependency

举个例子

           
                org.springframework
                spring-context
                ${org.springframework-version}
                
                    
                    
                        commons-logging
                        commons-logging
                    
                
            

type

默认为jar,一般可以不写

scope

默认值为compile,这个值决定了是否需要打包到target中,决定什么阶段需要
compile, 编译时需要,会打包到target中年,例如spring-core
test ,表明为测试时需要
provided ,编译时需要,不会打包到target 例如 servlet
runtime ,运行时需要,编译可能不需要,会打包到target, 例如JDBC驱动实现
system , 定义本地一些jar, 搭配systemPath一起使用,指明路劲,例如短信jar

exclusions

排除依赖的包

profiles

profies可以定义不同的环境,比如可以定义开发,测试,以及生产的环境,可以在打包的时候可以指定不同的环境,比如mvn clean package -Pdev

  
          
              
            dev  
              
                dev
              
              
                
                true  
             
            
                
                    
                        src/main/resources_env/dev
                    
                    
                        src/main/resources
                    
                
            
          
          
              
            qa  
              
                qa
            
            
                
                    
                        src/main/resources_env/qa
                    
                    
                        src/main/resources
                    
                
            
            
        
            
            online  
            
                online
              
            
                
                    
                        src/main/resources_env/online
                    
                    
                        src/main/resources
                    
                
            
         
    

补充知识:
在一个项目中,可能存在不同的不同的子模块,但是子模块之间存在一些依赖,这里就会涉及依赖仲裁,一般会遵循下面的两个原则

最短路径原则
加载先后原则

查看项目中jar的依赖关系

mvn dependency:tree > tree.txt,

8.生命周期以及常用命令

1.A Build Lifecycle is Made Up of Phases
2.A Build Phase is Made Up of Plugin Goals

image.png

可以看出,生命周期由不同的clean,default,site的不同阶段构成,而不同阶段是由插件的goals的构成

image.png
常用命令

compile 编译
clean 删除target/
test 运行test,test case junit/testNG
package 打包
install 把项目install到local repo
deploy 发本地jar发布到remote

一般组合的常用命令

mvn clean compile ,清理并编译
mvn clean package ,清楚并打包
mvn clean package -Dmaven.test.skip=true ,跳过测试,并清理打包

9.archetype 自定义模板

生成一个archetype,这里需要先定义好你的初始化的archetype,可以声明你的jar的依赖,以及子模块的结构,然后切换到父pom.xml的目录中,执行下面的语句

mvn archetype:create-from-project
cd /target/generated-sources/archetype
mvn install
从archetype创建项目 mvn archetype:generate -DarchetypeCatalog=local

·10.私服搭建

如果使用的是国外镜像,那么下载速度比较慢
如果使用的是阿里云镜像,速度还算ok,但是假如网速不好的时候,其实也是比较慢的
如果没有网的情况下更加下载不了
团队开发的时候,是不是每个人在自己的本地仓库都需要下载一份呢?
能不能大家共用一份呢?

当我们某个maven项目需要一份jar包的时候,mysql-connector.jar
先看一下你本地仓库是否有这样jar包(版本也要判断),如果有,则不下载
如果没有,则去下载,并且保存到本地仓库中,然后以后需要的话,就不需要下载了
在项目中进行开发的时候,仅仅就是将本地仓库的jar包导入到工程里面即可,再也不用
像传统原始方式那样,每个项目中都要一份单独的jar包,这样会造成jar包的冗余。

image.png
私服发布

搭建私服自行百度安装,假设我们安装好了之后,想要发布jar到私服该该怎么做
例如搭建的私服的地址为: http://localhost:8081/nexus
账号密码为:admin/admin123

需要修改setting.xml的配置文件

        
      nexus-snapshots
      admin
      admin123
    
    
      nexus-releases
      admin
      admin123
    

需要修改pom.xml

   
        
            nexus-snapshots
            http://localhost:8081/nexus/content/repositories/releases
            true
        
        
            nexus-releases
            http://localhost:8081/nexus/content/repositories/snapshots
            true
        
    
私服下载

方法一:需要配置setting.xml的mirror配置
方法二:配置好pom.xml的profile的仓库下载配置

这里配置在dev的profile的一个仓库下载的地址,也可以配置site和prod的仓库地址,一般来说dev和site的仓库的地址有的公司要分开的,这样可以根据profile的不同配置不同的环境的仓库地址,可以实现根据环境不同拉取不同的仓库的jar

 
     
            
            dev
            
                dev
            
            
                
                true
            
            
                
                    
                        src/main/resources_env/dev
                    
                    
                        src/main/resources
                    
                
            
            
                
                    maven-net-cn
                    Maven China Mirror
                    http://maven.net.cn/content/groups/public/
                    
                        true
                    
                    
                        false
                    
                
            

        
             test
            
                test
            
            
                
                    
                        src/main/resources_env/dev
                    
                    
                        src/main/resources
                    
                
            
            
                
                    maven-net-cn
                    Maven China Mirror
                    http://maven.net.cn/content/groups/public/
                    
                        true
                    
                    
                        false
                    
                
            

        
 

你可能感兴趣的:(maven)