项目管理利器-Maven实战

Maven基于项目对象模型(POM),集项目构建,编译,测试,打包,安装一站式服务。是目前主流的项目开发的管理利器,今天来详细学习下。

一、Maven下载与环境搭建

Maven下载:http://maven.apache.org/download

下载压缩包,解压缩到D盘要目录即可

配置环境变量:

M2_HOME:D:\apache-maven-3.1.1\

Path添加:;%M2_HOME%\bin;

检测maven是否安装成功,打开cmd:mvn -v

如果能看到maven版本信息及jdk信息,就表示安装成功了。

 

二、Maven约定的目录骨架结构

src

    -main

            -java

                   -package

    -test

           -java

                  -package

    -resources

 

三、常用的构建命令

mvn -v 查看版本信息

        compile   编译  编译成功后,会生成target目录

        test         测试  测试成功后,也会在target目录生成测试报告

        package 打包 打包成功后,也会在target目录生成jar包

        clean      清理target

        install      安装jar包到本地仓库

以上构建命令需要运行在jdk上,jre上会报找不到tools.jar

 

四、自动创建目录骨架

在没有集成到eclipse中时,可以使用命令创建项目目录:

1.archetype:generate 按照提示一步一步创建即可

2.archetype:generate -DgroupId=组织名(一般为公司网址反写+项目名)

                                   -DartifactId=项目名-模块名

                                   -Dversion=版本号(SNAPSHOT为快照版,release为发布版本)

                                   -Dpackage=代码所在的包名

 

五、坐标和仓库

坐标:每一个maven项目都由坐标来唯一定位,它有三个元素:

groupId

artifaceId

version

通过这三个元素就能准确找到一个maven项目

 

仓库:由maven管理的项目的所有jar包都在仓库中

仓库分为:

本地仓库

远程仓库(也叫中央仓库)

镜像仓库

我们使用的jar包会首先到本地仓库中去找,找不到会到远程仓库中下载到本地仓库。

 

1.本地仓库

一般我们安装完maven后,会在C盘的用户路径下:C:\Users\Yuwl\.m2有这个m2的文件夹,它就是我们的本地仓库,它下面有一个存放所有jar包的文件夹repository,还有一个settings.xml配置文件,它可以配置我们本地仓库的路径:

D:/.m2/repository

如,我的存放在D盘,因为C盘重装系统就没了

2.远程仓库

也叫中央仓库,它是maven的仓库,如果所用的jar包在本地仓库找不到,则去去远程仓库中下载,到本地仓库中再使用。

在maven的安装目录我的是D:\apache-maven-3.1.1\lib,下一个jar包:maven-model-builder-3.1.1.jar,以解压缩方式打开能看到有一个pom-4.0.0.xml文件,它里面有中央仓库的url:

 


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

 http://repo.maven.apache.org/maven2这就是maven的中央仓库

 

snapshots为false表示下载的为非快照版本,快照版一般为开发版本

3.镜像仓库

所谓镜像,提供其实为中央仓库一样的功能,只不过有时中央仓库访问不了,因为毕竟是国外的,而镜像仓库则是由国内很多厂商提供的,我们使用也很方便,具体用法如下:

修改m2下的settings.xml文件:

在mirrors节点下加入如下配置

 


      maven.net.cn
      central
      central mirror in china
      http://maven.oschina.net/content/groups/public/
    

mirrorOf表示要替换的中央仓库,用了这个配置,那么镜像仓库就会代替我们的中央仓库了。

 

 

六、在eclipse中安装maven插件,创建maven项目

一般现在较高版本的eclipse中都集成了maven插件,不需要单独安装了,没有的话,安装也很简单,这里就不多说了。

使用maven创建java项目:

new->maven project->选择maven-artifact-qickstart->输入groupId,artifactId,package

使用maven创建web项目:

new->maven project->选择maven-artifact-webapp->输入groupId,artifactId,package

我们可以看到maven为我们生成的项目目录结构开始讲的:

src

    -main

            -java

                   -package

    -test

           -java

                  -package

    -resources

webapp项目如果没有生成这样的目录,可自行手动创建

还能看到项目根目录下的pom.xml,这就是maven用来构建项目的配置文件

 

七、pom.xml解析

 


  4.0.0

  com.yuwl.maven
  maven-demo01
  0.0.1-SNAPSHOT
  jar

  maven-demo01
  http://maven.apache.org

  
    UTF-8
  

  
    
      junit
      junit
      3.8.1
      test
      

 项目开始结束标签

 

maven的版本,固定值为4.0.0

组织名:一般为公司网址反写+项目名

模块名:项目名+模块名

版本:0.0.1-SNAPSHOT为快照版

打包方式,有jar,war,pom等,默认为jar

作用不大

为配置信息

如下junit的version3.8.1可以配置为:

 


    UTF-8
    3.8.1
  

使用就可以写成这样:

 

 

${junit.verison}

这样做,所有jar包的版本号可以统一管理,改起来也方便

 

 

为项目依赖,即引用的外部jar包

 

八、Maven的生命周期和插件

生命周期一般包含:清理,编译,测试,打包,安装

即clean compile test package install

我们使用时可以clean到任何一个阶段,如

clean compile 包含test

clean package 包含test,compile

clean install 包含test,compile,package

Maven插件:

在pom.xml中由标签管理

 


  	
  		
  			org.apache.maven.plugins
        	maven-source-plugin
        	2.4
        	
        		
        			package
        			
        				jar-no-fork
        			
        		
        	
  		
  	
  

如上是一个生成源码打包的插件,Maven提供了很多丰富的插件,他的很多功能其实都是由插件来实现的。

 

maven自身的插件:http://maven.apache.org/plugins/index.html

还有很多第三方的插件,如jetty,tomcat等

 

九、依赖传递

即 B依赖A C依赖B,那么C依赖A

如果不想C依赖A,就依赖B,也可以做到,如下:

 


    	com.yuwl.maven
  		maven-demo02
  		0.0.1-SNAPSHOT
  		
  			
  				com.yuwl.maven
  				maven-demo01
  			
  		
    

本pom为demo03,依赖demo02,demo02依赖demo01

 

添加即可排除demo01的依赖

 

十、依赖冲突

两个原则:

1.短路优先

A->B->C->X.jar

A->D->X.jar(优先使用)

2.先声明,先使用,按先后顺序来

 

十一、聚合和继承

1.聚合使用一次性编译,测试,打包,安装

 


  4.0.0

  com.yuwl.maven
  maven-aggreation
  0.0.1-SNAPSHOT
  pom

  maven-aggreation
  http://maven.apache.org

  
    UTF-8
  
  
  
  
  	../maven-demo01
  	../maven-demo02
  	../maven-demo03
  

  
    
      junit
      junit
      3.8.1
      test
    
  

注意使用聚合时,当前pom的packing必须为pom。

 

 

2.继承,类似java的继承,有父子关系

先建一个parent的pom

 


  4.0.0

  com.yuwl.maven
  maven-parent
  0.0.1-SNAPSHOT
  pom

  maven-parent
  http://maven.apache.org

  
    UTF-8
    3.8.1
  
  
  
  
  	
	    
	      junit
	      junit
	      ${junit.version}
	      test
	    
  
  


在这个maven-parent中定义了junit依赖,但本项目不会用到这个依赖,在继承的子项目中会用到

 


  4.0.0

  maven-demo01
  jar

  maven-demo01
  http://maven.apache.org

  
    UTF-8
  
  
  
  	com.yuwl.maven
        maven-parent
        0.0.1-SNAPSHOT
  

  
    
      junit
      junit
    
  
  

 使用maven-demo01继承自maven-parent,可以继承到junit依赖,因此共同的jar包,我们可以放到parent pom中进行管理。

 

十二、Maven创建web项目,并通过插件发布到jeety,tomcat中

新建maven web项目maven-webdemo,pom.xml如下:


  4.0.0
  com.yuwl.maven
  maven-webdemo
  war
  0.0.1-SNAPSHOT
  maven-webdemo Maven Webapp
  http://maven.apache.org
  
    
      junit
      junit
      4.10
      test
    
    
		javax.servlet
		javax.servlet-api
		3.0.1
		provided
	
    
  
  
    maven-webdemo
    
    	
    		
    		org.apache.tomcat.maven
    		tomcat7-maven-plugin
    		2.2
    		
    			
    				
    				package
    				
    					run
    				
    			
    		
    	
    
  

 使用jetty:run来运行,或绑定到package命令上来运行都可以。tomcat插件也可以运行。

 

总结

这里仅学习Maven最基本的用法,虽然很基础,但很重要,给日常开发项目带来很多便利,后续再进一步补充。

 

 

 

 

 

 

 

 

你可能感兴趣的:(maven)