Maven核心概念的理解

来源:互联网 发布:脐带血公司 知乎 编辑:程序博客网 时间:2024/05/19 18:00
一、Maven的理解
  Maven是基于项目对象模(POM),通过描述一段信息来管理项目的构建的项目管理工具。Maven项目便于发布项目信息,以及在多个项目中共享JAR文件,因此有利于管理维护多个项目之间的依赖和继承关系。


二、配置Maven环境

  构建Maven项目,首先要安装Eclipse Maven插件,下载Maven解压包,配置Maven环境变量。修改Maven仓库地址,如图;


  

  settings.xml中:


  
  C:\Users\用户名\.m2\repository即为本地仓库的路径,可修改。
  

  一个Maven项目的目录结构大致如下:


  项目编译后产生的classes会放在${basedir}/target/classes 下面,jar包在${basedir}/target 下面,测试的classes 文件放在 target/test-classes/ 目录下面。目录结构清晰明朗,便于发布。


三、Maven核心概念
下面针对一些Maven最常见的术语,结合“用户中心”这个项目做个简单总结:
1.POM(Project Object Model):
  项目的所有配置都在pom.xml中描述:项目的类型、名字、依赖体系、插件行为等。
  POM的关系主要有继承、依赖、合成。
  
  一个项目分成几个子项目,每个子项目都有自己的POM文件,它们会有一个共同的父项目,这样只要构建父项目就能够构建所有的子项目了。子项目的 POM 会继承父项目的 POM。另外,所有的 POM都继承了一个 Super-POM。Super-POM 设置了一些默认值,比如在第一篇文章中提到的默认的目录结构,默认的插件等等,它遵循了惯例优于配置的原则。所以尽管我们的这个POM很简单,但是这只是你看得见的一部分。运行时候的 POM 要复杂的多。

2.Maven插件
  Maven生命周期本身不会做太多事情,它不知道怎么样编译或打包,它把构建的任务交给插件去做,插件定义了常用的构建逻辑,能够被重复利用,这样插件有了更新可以让所有的maven用户都得到更新。
  
3.生命周期
  Maven有三套相互独立的生命周期,分别是:
  Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  Site Lifecycle 生成项目报告,站点,发布站点。
  
  生命周期指项目的构建构成,它包含了一系列的有序的阶段(phase),而一个阶段就是构建过程中的一个步骤。每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。那么生命周期阶段和上面说的插件目标之间是什么关系呢?插件目标可以绑定到生命周期阶段上。一个生命周期阶段可以绑定多个插件目标。当 maven 在构建过程中逐步的通过每个阶段时,会执行该阶段所有的插件目标。maven 能支持不同的生命周期,但是最常用的是默认的Maven生命周期 (default Maven lifecycle )。对于每个阶段的用途可以参考:
  http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
  
4.Maven库
  当第一次运行maven命令的时候,他会从maven的默认的远程库也就是中央仓库下载一些文件(需联网),中央仓库里有maven的核心插件和可供下载的jar文件,但不是所有的jar都要从中央仓库里下载,比如我们自己开发项目所用到的jar,这就有了本地仓库的概念,本地库是指maven下载了插件或者jar后存放在本地机器上的位置,也就是上文提到的C:\Users\用户名\.m2\repository,当maven查找需要的jar文件时,它会先从本地仓库里寻找,当找不到所需要的jar时才会去中央仓库中下载。   
  运行$mvn install命令就可以把项目安装到本地库,别的项目就可以通过maven坐标和这个项目建立依赖关系,并且产生依赖包。
  
  
5.依赖管理
  在1.POM中已经说明了maven的依赖管理,但是实际开发中可能会有更复杂更多的依赖关系,因为被依赖的jar文件会有自己的依赖关系,一开始在担心这个问题:那些间接依赖的jar文件是不是也要定义到POM中? 后面发现其实不需要,因为maven提供了传递性依赖。 
  4中已经提到可以通过mvn install命令建立依赖包,但是随着我们代码的改动依赖包并不会自动更新,需要我们手动重新建立新的依赖包,显然这并不是好的做法,这个时候tomcat plugin自带一个功能 Activate DevLoader,只要勾选上任意位置或其他项目的library文件就可以动态加载它们到当前项目的classpath,很方便,当然前提要把上文的依赖包删除,否则会报异常。
                  
  如果打开tomcat时:
  java.lang.ClassNotFoundException:org.apache.catalina.loader.DevLoader,解决办法:
  1、在eclipse目录下,找到DevLoader包,位于
   \eclipse3.3-jee\eclipse\plugins\com.sysdeo.eclipse.tomcat_3.2.0.beta3 的DevLoader.zip
  2、复制到apache-tomcat-6.0.x 里的lib里, 并改为DevLoader.jar
  3、重启tomcat.

0 0
原创粉丝点击