Maven详解——跨平台项目管理工具

一.Maven是什么?

Maven是一个跨平台项目管理工具,是使用Java语言开发的,可以对 Java 项目进行构建、依赖管理。当然Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala和其他语言编写的项目。

二.为什么要使用Maven?

2.1 Maven主要有两大功能,分别是项目构建依赖管理

依赖管理可以理解为jar包的管理

项目构建包括以下几个环节:清理、编译、测试、报告、打包、部署。构建项目的方式有以下几种:

  1. 是使用IDE工具进行项目构建,相对来说步骤零散不好操作,每个新项目都要自己手动导入很多的jar包。
  2. Ant:一个专门的构建项目的工具,通过一些配置来完成项目的构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪?
  3. Maven:上面提到过是一个项目管理工具,通过使用Maven,可以对项目完成简单的快速的构建,不需要告诉Maven很多信息,但要按照Maven的规范去进行代码的开发,也就是说Maven是有规范的,而且这个规范的约束大于配置

2.2 官网地址和官方包目录结构

官网:http://maven.apache.org

maven官方压缩包的目录结构


img_9232.jpg

三.配置Maven的运行时环境

3.1 配置Maven环境变量(MAVEN_HOMEpath

MAVEN_HOME配置

]

path配置
  • 测试maven是否安装成功:在 cmd系统命令行中执行mvn -v

3.2 配置settings.xml

本地仓库与中央仓库


  • 默认本地仓库存放位置是在系统用户目录下的.m2/repository中。
  • 因为仓库很大,最好不要放在C盘,重新指定存放目录。将安装包中conf目录下的settings.xml拷贝到.m2目录下,并修改localRepository标签,指定仓库位置。
  • 注意:默认.m2目录不存在,因为没有执行任何maven相关命令,在命令窗口中执行mvn help:system命令,则自动生成.m2目录.

3.3 JDK版本配置

默认maven的jdk编译版本不是自己安装的1.8版本。需要进行版本配置,修改settings.xml如下:



                       jdk-1.8

                       

                               true

                               1.8

                       

                       

                               1.8

                               1.8

                               1.8

                       

               

3.4 mirror 镜像配置(阿里云镜像)

镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,目前有不少国内镜像,其中阿里云算是比较稳定的,同时也能保证下载速度。

修改settings.xml如下:



                       alimaven

                       aliyun maven

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

                       central

               

至此Maven的环境配置已经完成。

四.Maven的项目生命周期

在maven中存在"三套"生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令则前面操作会自动执行。

  • CleanLiftCycle 清理生命周期:pre-clean,clean,post-clean
  • DefaultLiftCycle`默认生命周期:validate,compile,test,package,verify,install,deploy(细分包括23 个阶段)
  • SiteLiftCycle 站点生命周期:pre-site,site,post-site,site-deploy(生成项目的站点文档)

五.Maven POM

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

POM 标签大全详解(来自菜鸟教程http://www.runoob.com)


    
    
        
        
        
        
        
        
        
        
    
    
    4.0.0
    
    asia.banseon
    
    banseon-maven2
    
    jar
    
    1.0-SNAPSHOT
    
    banseon-maven
    
    http://www.baidu.com/banseon
    
    A maven project to study maven.
    
    
        
        
    
    
    
        
        jira
        
        http://jira.baidu.com/banseon
    
    
    
        
        
        
        
        
        
            
            
                
                
                
                
                
                
                
                
                
                
                
                
Demo [email protected] [email protected] [email protected] http:/hi.baidu.com/banseon/demo/dev/ HELLO WORLD banseon [email protected] Project Manager Architect demo http://hi.baidu.com/banseon No -5 Apache 2 http://www.baidu.com/banseon/LICENSE-2.0.txt repo A business-friendly OSS license scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk http://svn.baidu.com/banseon demo http://www.baidu.com/banseon ...... ...... Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ ...... ...... ...... ...... ...... ...... banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default ...... org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true ...... banseon-maven2 banseon maven2 file://${basedir}/target/deploy banseon-maven2 Banseon-maven2 Snapshot Repository scp://svn.baidu.com/banseon:/usr/local/maven-snapshot banseon-site business api website scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web

六.Maven项目之间的管理(依赖、继承、聚合)

6.1 依赖

在工程之中需要依赖各种各样的jar包,也可能需要依赖其他的maven工程打包好的包。这个时候就需要在pom.xml中使用依赖关系进行配置。例如:

        

              com.bjsxt 

              HelloMaven 

              0.0.1-SNAPSHOT 

        


6.2 继承

继承为了消除重复,我们把很多相同的配置提取出来。所以,maven提供了一个父类maven项目(新建类型为pom的maven工程Parent)来装所有公共使用的jar,只要继承都可以使用

   

             groupA   

             artifactA   

             1.0   

 

当然也可以选择性继承,但是父项目的配置的依赖需要配置在dependencyManagement


    
        
            
            
                ......
            
        

在子项目的dependency标签中,不配置version,就会到父项目的dependencyManagement中去找相关依赖

     

             groupA   

             artifactA   

             1.0   

 

    

              com.bjsxt 

              HelloMaven 

     

6.3 聚合

拆分:将每一层代码放到一个工程里面,降低耦合度,提高可复用性,为其他工程依赖。然后对拆分后的项目进行聚合
如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,这样做,我们只需要对父工程进行mvn的 install命令,它就会依次把继承依赖的所有工程都自动执行mvn的 invalidcompiletestpackageverify(验证)、install命令了。
创建好的父工程目录中只有pom.xml,可以判断出父工程不进行编码。
父工程的作用: 项目需要的依赖信息在父工程的pom文件中定义,子模块继承即可将子模块聚合到一起

Maven聚合项目

在父项目中通过Module标签,将子项目聚合到一起,子项目创建选择的是Maven module,同时指定父项目


        maven-pojo
        maven-service
        maven-mapper
        maven-controller

6.4 标签中的scope

依赖范围scope(compile\test\provided\runtime

scope四个属性的作用

说明:如果使用到tomcat自带jar包,将项目中依赖范围设置成provided

七.Maven中的一些常用插件

7.1 Tomcat

maven项目可以在本地tomcat中运行,也可以在pom.xml中添加tomcat插件,配置插件内容,并运行。编写一个jsp页面,查看运行效果。



         

                  

                      org.apache.tomcat.maven

                      tomcat7-maven-plugin

                      2.1

                      

                          8080

                          /

                          UTF-8

                          tomcat7

                      

                 

         

         

7.2 assembly插件

  • 1.Assembly 插件的作用:
    • 构建一个完整的发布包,包含脚本、配置文件以及所有运行时所依赖的元素(jar),将所有依赖的jar包打包到压缩包中。
    • 支持多种格式,如zip、tar.gz、tar.bz2、jar、dir、war等等
  • 2.实现步骤:在原有项目基础上添加下面步骤(以Provider项目为例)
    • 2.1 在Provider的Maven项目的pom.xml中添加assembly插件(见下面的的pom.xml配置信息)
    • 2.2 在项目根目录下新建assembly文件夹
    • 2.3 解压assembly压缩包,并把binconf文件夹复制到新建的assembly文件夹.
    • 2.4 在assembly文件夹下新建assembly.xml文件,并添加内容(详见资料文档)
    • 2.5 右键项目--> Run as --> Maven Install 后会在target下生成.tar.gz的文件.
    • 2.6 window系统中解压后直接运行bin/startup.bat即可
    • 2.7 linux系统中解压后运行bin/startup.sh、linux系统中停止使用,解压后运行bin/stop.sh

pom.xml配置信息


        
            
            
                maven-assembly-plugin
                
                    
                    
                    assembly/assembly.xml
                
                
                
                    
                        
                        make-assembly
                        
                        package
                        
                            
                            single
                        
                    
                
            
        


assembly.xml配置信息



    
    assembly
    
    
        tar.gz
    
    
    true
    
        
        
            
            assembly/bin
            bin
            
            0755
        
        
        
            assembly/conf
            conf
            
            0644
        
    
    
    
    
        
            lib
        
    


八.Maven使用的常见问题总结

1、我从SVN上下载了一个以Maven构建的工程,下载完毕没有jar包怎么办?

从资源库上下载下来的Maven工程,是没有jar包的,此时可以这么做:

(1)删除Maven工程,但是删除的时候不要删除本地工程里面的Maven工程,只删除MyEclipse中的Maven工程

(2)右键Import->Maven4MyEclipse->Existing Maven Projects,导入你的Maven工程,此时MyEclipse在构建工程的时候,假如你的本地仓库中没有dependcy中的jar包,便会去远程仓库下载jar包到本地仓库中。你的工程导入完毕之后,Library应该是这样的:

image

2、重新下载Maven工程所依赖的jar包、导入jar包都需要触发Maven工程的build workspace,那么如何才能触发Maven工程的build workspace?

找到一个pom.xml,随便修改一下,加一个空格、减一个空格什么的,ctrl+s保存一下,便会触发Maven工程的build workspace了

3、本地仓库的目录结构是什么样子的?

groupIdartifactIdversion确定一个唯一的Maven,比方说我有一个mybatis的dependcy:



  org.mybatis

  mybatis

  3.2.5


那么mybatis的jar包应该在%Maven仓库地址%\org\mybatis\mybatis\3.2.5\这一路径下,看到了吧,先groupId,再artifactId,最后version,每个名字都是一个文件夹的名字

4、有些jar包在dependcy里面有配置,Import了Maven工程,下载完工程所依赖的jar包之后,发现本地仓库里面却没有,怎么办?

可能是原先下载jar包的时候出了什么问题,从artifactId目录开始删除以下的所有文件/文件夹,然后触发一次Maven工程的build workspace就可以了

5、本地仓库中确定已经有jar包了,工程里面却报错,说找不到jar包,该怎么办?

应该有很多解决办法,目前解决的一种办法是,MyEclipse->Window->Preferences->搜索Maven->User Settings,Update Settings和Reindex点一下就好了。或者Eclipse的Maven->update,另外,可以尝试一下把本地Maven仓库内的jar包删除一下,然后重新build workspace,可能也可以。

6.发生了依赖冲突
在导致冲突的dependency标签里面,加入如下内容


    
        example
        example
    

然后这个dependency就不会去把被exclude的东西放进来了。

如果你不知道冲突在哪,pom.xml选择时点击,Dependency Hierarchy可以看到依赖关系,在intellij中,右击这个dependency,菜单中的Maven->Show Dependecies中也可以看到依赖图(这个图上也可以选中然后右击菜单选exclude)。

你可能感兴趣的:(Maven详解——跨平台项目管理工具)