Maven 基础课程
1 maven 仓库
1、 maven 仓库的类型有哪些?
2、 maven 工程查找仓库的流程是什么?
3、本地仓库如何配置?
2 常用的 maven 命令
3 坐标定义
4 pom 基本配置
5连接sql
connection = DriverManager.getConnection("jdbc:mysql:///maven","root", "root");
第1章 Maven 介绍
1.1 什么是 Maven
1.1.1 什么是 Maven
Maven 的正确发音是[ˈmevən],代表专家、内行的意思。
Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
1.1.2 Maven 能解决什么问题
帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点
1.1.3 Maven 的优势举例
开发的项目小,没有jar包
1.2 Maven 的两个精典作用
1.2.1 Maven 的依赖管理
Maven 的一个核心特性就是依赖管理。
maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar包的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。
1.2.2 项目的一键构建
什么是构建?
指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理
一键构建
指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。Maven 规范化构建流程如下:清理,编译,测试,报告,打包,部署
第2章 Maven 的使用
2.1 Maven 的安装
2.1.1 Maven 软件的下载
Apache-maven-3.5.2 下载地址: http://archive.apache.org/dist/maven/maven-3/
2.1.2 Maven 软件的安装
Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 D:\software\maven 下面。
解压后目录结构如下:
bin:存放了 maven 的命令,比如mvn tomcat:run(运行tomcat服务器)
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
2.1.3 JDK 的准备及统一
2.1.4 Maven 及 JDK 配置
电脑上需安装 java 环境,安装 JDK1.7 + 版本 (将 JAVA_HOME/bin 配置环境变量 path )
配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)
注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和空格。
2.1.5 Maven 软件版本测试
通过 mvn -v命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 及 java 版本为 1.8 即为安装成功。
找开 cmd 命令,输入 mvn –v命令
2.2 Maven 仓库
2.2.1 Maven 仓库的分类
下载 jar 包并存在本地仓库,本地仓库 就是本地文件夹,当第二次需要此 jar 包时则不再从远程仓库下载可以将本地仓库理解为缓存。
本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找默认本地仓库位置在 ${user.dir}/.m2/repository, ${user.dir}表示 windows 用户目录(c/user/Administrator)。
远程仓库:如果本地需要插件或者 jar 包,本地仓库没有, 默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2
2.2.2 Maven 本地仓库的配置
将 “repository.rar”解压至自己的电脑上, 我们解压在 D:\repository 目录下(可以放在没有中文及空格的目录下)。
在 MAVE_HOME/conf/settings.xml 文件中配置本地仓库位置(maven 的安装目录下):
打开 settings.xml 文件,配置如下:
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
2.2.3 全局 setting 与用户 setting
maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。
在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project项目,它作为 maven 的全局配置。
个性配置在用户配置中设置,用户配置的 setting.xml 默认的位置: ${user.dir}/.m2/settings.xml 目录中,${user.dir} 指 windows 中的用户目录。
maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
2.3 Maven 工程的认识
2.3.1 Maven 工程的目录结构
作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。
进入 src 目录后,我们发现它里面的目录结构如下:
src/main/java —— 存放项目的.java 文件(核心代码部分)
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件(配置文件部分)
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类(测试代码部分)
src/test/resources —— 测试资源文件(测试配置文件)
src/main/webapp ---页面资源,js,css,图片等
target —— 项目输出位置,编译后的 class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有 webapp 目录。
2.3.2 Maven 工程的运行
进入 maven 工程目录(当前目录有 pom.xml 文件),运行 tomcat:run 命令(启动tomcat服务器,tomcat7:run,启动tomcat版本7)。
根据提示信息,通过浏览器访问: http://localhost:8080/maven-helloworld/
注意:有时pom.xml中没有配置tomcat信息,要手动添加:
2.3.3 问题处理
如果本地仓库配置错误会报错误
maven 工程运行先从本地仓库找 jar 包,本地仓库没有再从中央仓库找,上边提示 downloading…表示 从中央仓库下载 jar,由于本地没有联网,报错。
解决:
在 maven 安装目录的 conf/setting.xml 文件中配置本地仓库,参考:“maven 仓库/配置本地仓库章节”。
第3章 Maven 常用命令
3.1
3.1.1 compile
compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target目录下。
cmd 进入命令状态,执行 mvn compile
查看 target 目录, class 文件已生成,编译完成。
3.1.2 test
test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。
3.1.3 clean
clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
3.1.4 package
package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包。
3.1.5 install
install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
当后面的命令执行时,前面的操作过程也都会自动执行,
3.1.6 Maven 指令的生命周期
maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,
这三套生命周期分别是:
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。(清理生命周期)
Default Lifecycle 构建的核心部分,编译compile,测试test,打包package,部署install,发布deploy等等。(默认生命周期)
Site Lifecycle 生成项目报告,站点,发布站点。(站点生命周期)
3.1.7 maven 的概念模型
Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖
管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
项目对象模型 (Project Object Model)
包括项目信息,项目依赖的jar包,项目运行环境
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。
依赖管理系统(Dependency Management System)
包括公司组织名称,项目名,版本号
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。
比如:项目依赖 junit4.9,通过在 pom.xml 中定义 junit4.9 的依赖即使用 junit4.9,如下所示是 junit4.9的依赖定义:
一个项目生命周期(Project Lifecycle)
使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程, maven 将这些
过程规范为一个生命周期,如下所示是生命周期的各个阶段:清理,编译,测试,报告,打包,部署
一组标准集合
maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有
标准的生命周期阶段、依赖管理有标准的坐标定义等。
插件(plugin)目标(goal)
maven 管理项目生命周期过程都是基于插件完成的。
3.2 idea 开发 maven 项目
3.2.1 idea 的 maven
注意:在setting->maven->runner->VM_option中填上-DarchetypeCatalog=internal,能使maven在未联网时查找存储在本地的仓库
3.2.2 idea 中创建一个 maven 的 web 工程
当出现提示:Maven projects need to be imported时,选择Enable Auto-Import
当控制台提示成功后;BULID SUCCESS,此时目录不完整,要手动补齐
创建java成功后,在新的文件夹 java 上点击Make Directory ->Sources Root
3.2.2.1 创建一个 Servlet
src/java/main 创建了一个 Servlet,但报错,要将 servlet-api-xxx.jar 包放进来,作为 maven 工程应当添加 servlet 的坐标,从而导入它的 jar
3.2.2.2 在 pom.xml 文件添加坐标
直接打开 hello_maven 工程的 pom.xml 文件,再添加坐标,添加 jar 包的坐标时,还可以指定这个 jar 包将来的作用范围。
每个 maven 工程都需要定义本工程的坐标,坐标是 maven 对 jar 包的身份定义,比如:入门程序的坐标定义如下:
再如:
注意:maven工程对每个目录下放的文件都有严格的要求,Java目录下不能放jsp文件,为了能放jsp文件,可以在Project Structure 的module选择该项目的Web文件夹,右下方Web Resource Directories中选择+,添加java文件目录即可
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom
3.2.2.3 坐标的来源方式
添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下方式查询:
3.2.2.3.1 从互联网搜索
http://search.maven.org/
http://mvnrepository.com/
网站搜索示例:
3.2.3 依赖范围
A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,如
compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。 编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
provided: provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如: servlet api 被 tomcat 容器提供。
runtime: runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。 比如: jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
test: test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如: junit。由于运行时不需要所以 test范围依赖不会被打包。
system: system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR文件的路径, 需要指定 systemPath 磁盘路径, system依赖不推荐使用。
在 maven-web 工程中测试各 scop。
测试总结:
默认引入 的 jar 包 ------- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
servlet-api 、 jsp-api ------- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
jdbc 驱动 jar 包 ---- runtime (测试、运行 有效 )
junit ----- test (测试有效)
依赖范围由强到弱的顺序是: compile>provided>runtime>test
3.2.4 项目中添加的坐标
3.2.5 设置 jdk 编译版本
本教程使用 jdk1.8,需要设置编译版本为 1.8,这里需要使用 maven 的插件来设置:
在 pom.xml 中加入:
3.2.6 编写 servlet
3.2.7 编写 jsp
3.2.8 在 web.xml 中配置 servlet 访问路径
3.2.9 添加 tomcat7 插件
3.2.10运行结果
第4章 maven 工程运行调试
4.1 端口占用处理
重新执行 tomcat:run 命令重启工程,重启之前需手动停止 tomcat
4.2 断点调试
点击如图所示选项
在弹出框中点击如图加号按钮找到 maven 选项
在弹出窗口中填写如下信息
完成后先 Apply 再 OK 结束配置后,可以在主界面找到我们刚才配置的操作名称。
如上图红框选中的两个按钮,左侧是正常启动,右侧是 debug 启动。
第5章 总结
5.1 maven 仓库
1、 maven 仓库的类型有哪些?
2、 maven 工程查找仓库的流程是什么?
3、本地仓库如何配置?
5.2 常用的 maven 命令
常用 的 maven 命令包括:
compile:编译
clean:清理
test:测试
package:打包
install:安装
5.3 坐标定义
在 pom.xml 中定义坐标,内容包括: groupId、 artifactId、 version,详细内容如下:
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom
5.4 pom 基本配置
pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下: