1. 什么是maven? 它是一个软件开发的管理工具,主要管理的工作是:依赖管理,项目构建. 2. 使用maven的好处? 能够集中管理jar包,提供一键构建. 3. maven的安装及配置 配置:MAVEN_HOME,PATH路径配置. 本地仓库 : <localRepository> Settings.xml 文件中. <localRepository>d:/repository</..> 运行 : mvn -v. 4. 常用的maven命令 compile,test,package,install,deploy clean site 5. maven 工程是具有一定的目录结构 src main java(程序主要代码) resources(配置文件) webapps test java(测试代码) resources(测试的配置文件) pom.xml(写一些坐标) 6. eclipse工具下的maven工程开发 7. 在pom.xml文件中如何引入坐标 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> 8. 总结 二、Maven工程的拆分与聚合(重点) 一个完整的早期开发好的crm项目,现在要使用maven工程对它进行拆分,这时候就可以将dao拆解出来形成表现独立的工程,同样service,action也都这样拆分 工程拆分之后,将来还要聚合(聚合就是将拆分的工程进一步组合在一起,又形成一个完整的项目) 为了达到聚合的目标,所以今天会引入 父工程(maven project) 子模块(maven module) dao ,service, web 开发步骤: 1.创建一个maven父工程 点下一步: 创建后的父工程如下: 从它的目录结构可以看出,父工程本身不写代码,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置通用jar的坐标了 2.如何创建这个父工程的一个子模块? 点next,进入如下图: 点next,进入如下图: 3.再次查看父工程的pom.xml文件 4.查看子模块的pom.xml,发现多了一个 parent结点 并且内部所包含的结点,其实就是父工程的坐标 坐标=groupId+artifactId+version 组织名 项目名 版本 三.冲突问题的解决 1.通过添加<exclusion>标签来解决冲突 在父工程中引入了struts-core,hibernate-core,就发现jar包是有冲突的 Javassist存在版本上冲突问题 进入下图: 背后的父工程的pom.xml文件中,添加的内容 2.依赖调解原则: maven自动按照下边的原则调解: ?1、第一声明者优先原则 在pom文件定义依赖,先声明的依赖为准。 测试: 如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。 分析: 由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。 ?2、路径近者优先原则 例如:A依赖 spirng-beans-4.2.4,A依赖B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。 测试: 在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> 2.使用版本锁定实现冲突解决 首先父工程中pom.xml文件添加: 在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以 可以借用常量的思想,将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。 引用上面的常量 3.最终在ssh_parent的pom.xml中引入的坐标 依赖注入手动排除 : 可以当做特殊情况,struts2框架和hibernate框架很少使用共同的jar包. 声明优先原则 : 选择的依据,根据引入顺序,谁先引入,就先使用谁. pom.xml里面的Dependencies选项里面的坐标引入的都是直接依赖. 而通过直接依赖引入的jar包都是传递依赖. 路径近者优先 : 直接引入的依赖,优先级高于传递进来的依赖. <!--使用常量来管理以后版本升级的问题 --> <properties> <spring-version>4.2.4RELEASE</spring-version> </properties> <!-- 依赖管理节点限制使用jar包的版本 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependen </dependencies> </dependcyManagement> 三、依赖关系 依赖具有传递性,但不是无限传递的,传递的规则如下: A-provided-B B-runtime-C 解决方法: 如果在依赖传递过程中,导致jar包丢失,我们的做法很简单,就是再导入一次坐标 四.编写Service模块 1.创建一个maven m