您的位置:首页 > 运维架构 > Tomcat

Maven核心概念的理解

2014-05-03 19:11 281 查看
一、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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven 项目管理 tomcat