第一章:Maven概述
(1)Maven是一个项目构建工具,由apache提供,用Java开发的
(2)构建工具:Ant(蚂蚁),Maven(专家)
(3)构建工具作用:帮助程序员进行项目的创建,目录的创建、代码的编译,执行,测试,打包...
(4)传统构建的缺陷:
a:项目之间的依赖不方便,只能通过导包的形式建立关联
b:不能实时更新代码
c:导包方式麻烦,需要自己下载jar进行导入
d:当导入的jar包比较多时,容易发生包的重复,相同包的不同版本,jar包之间版本兼容问题
(5)Maven当前最新版本为3.6.1,本文章使用3.3.9
第二章:Maven常用配件概念
(1)仓库,Repository,用于存放所有的jar包
a:*仓库,由apache官方提供,*网址,下载速度慢
b:镜像仓库,由各个国家地区为国内程序员提供的仓库,阿里巴巴
c:本地仓库,jar包永远从本地仓库获取
(2)坐标
a:groupid:组编号,通常是逆向的公司域名
b:artifactid:项目的名称
c:version:版本号
查询jar包坐标的网址:
官网: https://mvnrepository.com/
阿里: https://maven.aliyun.com/mvn/search
第三章:创建Maven工程_jar类型
注:Maven插件、本地仓库(包括jar包),在文章末尾会有网盘下载链接,注意下载
3.1:配置my eclipse运行环境
(1)编码方式:UTF-8(包括Workspace、css、HTML、JSP、XML的编码格式)
(2)检查jdk版本:1.8
注:最好不要使用系统默认的JDK,使用本地安装的JDK,否则工程运行会报错
(3)配置tomcat
(4)个人爱好配置:
a:字体设置
b:去除拼写检查
c:更换工程格式为Package Explorer
3.2:下载Maven并解压
3.3:在eclipse中集成Maven
3.3.1:在eclipse中加载Maven安装目录
注意:在加载完成后,不要立即去创建Maven工程,否则会造成Eclipse卡顿
3.3.2:配置Maven信息
(1)指定Maven的配置文件settings.xml
(2)配置本地仓库位置
E:\Repository
(3)配置镜像仓库位置
用阿里巴巴的仓库,国内仓库,网速快
<!-- 配置镜像仓库地址 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(4)配置jdk:
<!-- 指定jdk版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
3.3.3:创建Maven工程
分三种类型:
(1)jar:代表一个javase工程,将来Maven打包时会将这个工程打包成jar包
(2)war:代表一个web工程,打包成war包
(3)pom:表示一个逻辑工程,工程中只做项目管理,不做代码编写
pom:Project Object Model,可以将一个工程当成一个对象
Group Id:表示路径Id别的项目通过此ID进行定位本项目
Artifact Id:工程名称
Version:版本号
0.0.1-SNAPHOT:表示当前工程处于修改阶段,不建议引用
当配置完成后,点击保存,系统就户i根据依赖配置去下载相关jar包,并加载到工程中
第四章:创建Maven工程_war类型
4.1:注意打包类型
(1)packading:war
(2)在项目创建成功后,生成web.xml 文件
(3)应该放在src/main/webapp/WEB-INF/web.xml
(4)建议自动生成,不建议手动创建目录,项目上右键->JavaEE Tools->Generate Deployment Descriptor Stub
4.2:添加项目依赖
(1)需要Tomcat支持,Maven中提供了Tomcat插件,每一个项目都可以有自己独特的Tomcat,便于独立开发某同事便于分布式开发
(2)编码时需要依赖servlet-api.jar和jsp-api.jar
(3)需要依赖相关框架的jar包:spring,springmvc,mybatis...
<scope>test</scope>
表示该包只是在测试的时候生效,在项目运行和打包时不会生效
<scope>provided</scope>
表示该jar包只会在代码编写过程中和编译中生效,不会打包到jar包中
<scope>compile</scope>
表示该包在所有阶段都会有效,包括项目打包阶段,为默认值
<scope>runtime</scope>
表示该包只是在运行时有用,比如数据库驱动包
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<!-- MaBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- web -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax-servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- commons -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<!-- log -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
4.4:运行
maven build
输入命令:clean tomcat7:run
第五章:创建pom工程
5.1:pom工程简介
(1)pom工程是一个逻辑工程,只做项目的管理,不做代码的编写
(2)pom工程通常适一个父工程,拥有多个子工程
(3)pom工程中可以对jar包进行统一管理,子工程可以无需再配置jar包
5.2:pom工程常用标签
(1)因为子工程可能有多个,而多个子工程不可能用到所有负工程中定义的jar包,所以,可以在pom工程中通过<dependencyManagment>标签对jar包进行统一管理
(2)使用<dependencyManagement>标签定义的依赖,只做声明,并不会直接使用,如果需要使用,还是需要通过配置<dependency>标签,父工程中国统一声明依赖,可以有效的集中控制依赖(版本)
(3)使用<properties>标签对依赖jar包的版本进行控制,例如:
<properties>
<spring-version>4.1.6-release</spring-version>
</properties> <version>${spring-version}</version>
第六章:Maven工程间的三种关系
6.1:依赖关系
依赖关系是最弱的一种关系,有A和B两个工程,A工程中需要使用B工程中定义的属性或方法,那么,此时我们说A依赖B
6.2:继承关系
例如有A和B两个工程,B工程继承A工程,要求A工程必须是一个pom工程
在当前工程坐标中,如果groupId和version跟父工程相同,那么可以省略
6.3:聚合关系
聚合关系要求必须是先有继承关系,聚合关系要比积尘搞关系更紧密
将一个大型工程,拆分成多个小工程,这几个小工程合起来是一个工程
创建聚合工程的方式:
(1)先创建一个*工程,该工程必须是pom工程
(2)在*工程的基础上创建Maven Module
第七章:聚合工程的创建演示
7.1:项目拆分分析
一个项目,有按功能拆分和按层次拆分两种,本次练习按照前台项目和后台项目进行拆分
SSM聚合工程,结构:
(1)*工程
名称:project-ssm
类型:pom
pom.xml:所有依赖的管理
(2)实体类模块
名称:ssm-pojo
类型:jar
(3)数据访问模块
名称:ssm-mapper
类型:jar
pom.xml
(4)后台系统
名称:ssm-management
类型:pom
(5)后台系统的控制器模块
名称:management-controller
类型:war
pom.xml
(6)后台系统的服务模块
名称:management-service
类型:jar
pom.xml
(7)后台系统的服务实现模块
名称:management-service-impl
类型:jar
pom.xml
7.2:项目拆分步骤实施
web工程在运行前,需要将整个工程安装在本地仓库
<!-- 添加依赖 -->
<!-- 管理jar包版本 -->
<properties>
<spring-version>4.1.6.RELEASE</spring-version>
<aspectj-version>1.8.13</aspectj-version> <jackson-version>2.7.3</jackson-version> <mybatis-version>3.4.6</mybatis-version>
<mybatis-spring-version>1.3.2</mybatis-spring-version> <mysql-version>5.1.38</mysql-version> <servlet-api-version>2.5</servlet-api-version>
<jsp-api-version>2.1</jsp-api-version> <jstl-version>1.2</jstl-version> <fileupload-version>1.3.1</fileupload-version> <lang3-version>3.4</lang3-version> <log4j12-version>1.7.25</log4j12-version> <junit-version>4.12</junit-version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj-version}</version>
</dependency> <!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<!-- MaBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring-version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-version}</version>
<scope>runtime</scope>
</dependency> <!-- web -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency> <!-- commons -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${fileupload-version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${lang3-version}</version>
</dependency> <!-- log -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${log4j12-version}</version>
</dependency> <!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<pluginManagement>
<plugins>
<plugin>
<!-- Tomcat插件 -->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- 配置tomcat -->
<configuration>
<path>/</path>
<port>80</port>
</configuration>
</plugin>
</plugins>
</pluginManagement> </build>
第八章:Maven工程的热部署
8.1:热部署概念
热部署指的是通过Maven将项目远程部署到已经启动的服务器上的操作
需要借助tomcat默认提供的管理项目来实现,叫做manager
host-manager文件夹:是对Tomcat服务器进行管理
manager文件夹:是对部署到服务器上的项目进行管理
对于Tomcat7,使用管理器应用程序所需的角色已从各个大哥管理器角色更改为以下四个角色。如果需要分配你希望访问的功能所需的角色;
manager-gui:允许访问HTML、GUI和状态页面
manager-script:允许访问文本界面和状态页面
manager-jmx:允许访问JMX代理和状态页面
manager-status:仅允许访问状态页面
在D:\Java_SoftWare\apache-tomcat-7.0.53-windows-x64\apache-tomcat-7.0.53\conf,修改tomcat-users.xml配置文件
<role rolename="manager-gui" />
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script"/>
8.2:热部署实施步骤
方法一:页面操作
地址栏输入:http://localhost:8080/manager
然后输入用户名,密码,进入页面进行项目的部署和管理
方法二:脚本命令操作
<!-- 配置tomcat -->
<configuration>
<path>/</path>
<port>80</port>
<!-- 配置热部署 -->
<url>http://192.168.57.165:8080/manager/text</url>
<username>tomcat</username>
<password>tomcat</password>
</configuration>
输入:
如果是第一次部署,输入:clean tomcat7:deploy
如果将项目修改,进行再次部署,输入:clean tomcat7:redeploy
注:
Maven插件及本地jar包仓库下载:
链接:https://pan.baidu.com/s/1vB_S1A7mvADtrkxn1IEtbw
提取码:ij5z