1 Maven 的基础:
是apache公司开源项目 是项目的构建工具,用来依赖管理:对jar包的统一管理
1.1 Maven的好处
- 使用传统的项目内存占用大 maven占用内存小 无jar包
无jar包如何运行的?
给出jar包的坐标信息去jar包仓库去查找jar包
1.2 Maven的好处如何实现
Maven的两大核心:
依赖管理:对jar包的管理过程
项目构建:项目编码完成后,对项目进行编译 测试 部署 这一系列的操作都可以通过命令来实现
通过maven的命令发布到tomcat上 :找到maven的工程目录,然后
mvn tomcat: run
1.3 Maven的安装
Maven程序安装前提:maven程序java开发 他运行依赖jdk
- 将maven解压到本地磁盘(解压的目录不要有中文和空格)
Bin 可执行脚本文件
Conf 配置文件
Lib jar包
Boot是类加载器 - 配置环境变量
Jdk的环境变量必须是java—home
将maven_home配置到path环境中
1.4 配置本地仓库
存放jar包
- 寻找jar包
- 解压到本地磁盘
- 配置本地仓库(目的:让maven程序知道jar包在哪)
Setting.xml中
配置本地仓库的路径
1.5 Maven项目标准目录结构
对项目的文件进行了一些细分
1.6 Maven的常用命令
- 1.清理文件
Clean:清理:将项目根目录下 target目录清理掉 - 2 Compile:编译
将项目java文件编译为.class文件 - 3.Test 执行单元测试
单元测试类名有要求:xxxxTest.java
将项目根目录下src/test/java目录下的单元测试类都会执行 - 4 Package:打包
Web project----war包
Java project-----jar包
将项目打包,打包到项目的根目录taget目录 - 5.Install:安装
本地多个项目共用一个jar包
打包到本地仓库 - 6 Maven项目的生命周期 在一套生命周期内 执行后面的命令 前面的操作会自动执行
在maven中存在三套生命周期 每一套生命周期都是相互独立的 互不影响
CleanLifeCycle 清理的生命周期 clean
DefaultLifeCycle 默认生命周期 compile test package install deploy
SiteLifeCycle 站点生命周期 site
1.7 Maven整合web项目的案例
1.7.1 Eclipse配置maven环境
- 配置maven插件 m2e插件
- 需要配置maven程序
- 构建索引
1.7.2 使用maven整合servlet
POM.XML
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itcast.maven</groupId>
<artifactId>maven-crm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>web工程,包括jsp、action等</name>
<description>web工程,包括jsp、action等</description>
<!-- 属性 -->
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
<hibernate.version>5.0.7.Final</hibernate.version>
<struts.version>2.3.24</struts.version>
</properties>
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 依赖管理 -->
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- 导入 struts2 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
</dependency>
<!-- servlet jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 设置编译版本为1.7 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
创建好的maven项目有两个错误:
缺失 web.xml
修改jdk版本
1.7.3 创建一个serlet
2 maven概念模型:
两个核心:
依赖管理:对jar包的管理
项目构建:通过命令进行项目构建
2.1 传递依赖冲突解决
2.1.1 Maven自己调节原则
传递依赖 A(项目)依赖B,B依赖C B是A的直接依赖,C就是A的传递依赖
第一声明优先原则
近者优先原则(路径)
直接依赖级别高于传递依赖
2.1.2 排除依赖
2.1.3 版本锁定
2.1.4 引用属性 (规定版本号)
Ognl表达式可以在配置文件中使用
2.1.5 单元测试
- 批量加载spring的配置文件
A. Classpath:spring/applicationContext-.xml
B. Classpath:spring/spplicationContext-*.xml:既要加载本项目中的配置文件,还要加载jar包中的配置文件 - 传递依赖的范围
A;ssh-service 工程
B:ssh-dao 工程
C:junit单元测试
总结:当项目中需要的某一个依赖没有传递过来,在自己工程中添加对应的依赖
2.2 通过maven整合ssh框架
2.3 通过maven对项目进行拆分 聚合
对现在已有的maven ssh项目进行拆分 拆分思路,将dao层代码已经配置文件全部提取出来,到一个表现上独立的工程中,同样service action拆分
Ssh-parent 父工程
Ssh-dao
Ssh-service
Ssh-web
拆分完成对拆分后的项目进行聚合,提出概念父工程
创建maven工程中的父工程 只有pom.xml可以推断父工程不能进行编码
- Pom文件进行定义一些依赖信息,在父工程中定义,子模块继承父工程
- 将各个子模块聚合到一起
将创建父工程发布到本地仓库
将来service dao 工程发布到本地仓库,发布的service工程会报错
如果忘记此步骤,将父工程发布到本地仓库
2.4 私服的应用
Maven的好处:- 不再拷贝jar包,项目不需要存档jar包 导致项目源代码小
- 使用maven开发工程,如果环境统一导入别的maven的项目不会报错
- 代码耦合度进一步降低
- 项目进行升级
- 节省人力成本