一.概述
1.层次以及所用技术
和浏览器相关:视图层,表示层,表现层{{
视图层(H5 CSS JSP)
控制层(servlet/action(struct2)/Handler(spring mvc))
}
业务逻辑层{ Spring IOC AOP
}
持久化层(和数据库交互){ JDBC/DBUtils/Spring JDBCTemplate/Hibernate/Mybatis
}
数据库 { Oracle/MySQL
}
2.目前的技术在开发过程中存在的问题(Maven有什么用)
-
一个项目就是一个工程
如果一个项目什么庞大就不适合使用Pckage划分模块(以前的是一个功能模块是一个package,现在是把每一个功能模块看作是一个工程,在每一个工程中去开发每一个模块功能,有利于协同工作,现在利用Maven可以将一个项目拆分成多个工程)
-
项目中需要的jar包必须手动的“复制”、“粘贴”到WEB-INF/lib目录下
带来的问题:同样的jar包重复出现在不同的项目工程中,一方面浪费存储空间,二是项目显得臃肿。借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程,“引用”这个文件即可,并不需要真的需要将这个jar包复制过来。这样这个项目就很简洁。
类似于:
具体怎么引用:
-
jar包需要别人替我们准备好或者到官网下载
如果没有Maven就得去官网下载,但是不同技术提供的jar包下载是五花八门的。并且有些技术的官网就是通过Maven
或者SVN等专门的工具来提供下载。
借助Maven可以以一种正规的方式下载Jar包,因为所有的知名矿建或第三方工具的jar包已经按照统一的规范存放在Maven的中央仓库中。
-
一个jar包依赖的其他jar包需要自己手动加入到项目中
FileUpload组件->(依赖)IO组件 例如:commons.fileupload1.3.jar依赖于commons-io-2.0.jar
依赖关系层次图:.
3.Maven是什么【what】
-
Maven是一款服务于Java平台的自动化构建工具()。
发展史: Make->Ant->Maven-Gradle
-
构建:
-
概念:以Java源文件,框架配置文件,jsp,html,图片等资源为原材料,去生产一个可以运行的项目的过程
-
编译:Java源文件(user.java)->Class字节码文件(User.java)->交给JVM运行。
-
部署:一个动态B/项目最终不是动态Web工程本身,而是这个动态Web工程“编译的结果”。
生的鸡—>处理---->熟的鸡->
动态的Web工程->编译、部署->编译的结果
-
构建过程中的各个环节
-
清理: 将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
-
编译:将Java源程序编译成class字节码
-
测试:自动的测试,自动调用junit来进行测试
-
报告:测试程序执行的结果
-
打包: 动态Web工程打jar包,java工程打jar包
-
安装:Maven特定的概念--将打包得到的文件复制到“仓库”中的指定位置
-
部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运 行
4.Maven的核心概念
-
约定的目录结构
-
POM
-
坐标
-
依赖(重要)
-
仓库
-
生命周期/插件/目标
-
继承
-
聚合
5.创建Maven工程
-
创建约定的目录结构
-
根目录:工程名
-
src目录:源码
-
pom。xml:Maven工程的核心配置文件
-
main文件:存放主程序
-
test目录:存放测试程序
-
java目录:存放java源文件
-
rescores目录:存放框架或其他工具的配置文件
-
为什么遵守预定的目录结构呢?
-
java要负责我们这个项目的自动化构建,以编译为例。maven要想自动进行编译,那么它必须知道Java的文件保存在哪里。
-
如果我么自定义的东西想让框架或工具知道,有两种办法:一是以配置的方式明确告诉框架或者工具,二是遵守框架内部已经存在的约定。(约定大于配置大于编码)
6.常用Maven命令
-
注意:执行与构建过程相关的Maven命令(编译,测试,打包....),必须进入pom.xml所在的目录。
-
-
-
mvn clean 清理
-
mvn compile 编译主程序
-
mvn test-compile 编译测试
-
mvn test 执行测试
-
mvn package 打包
-
-
7.关于联网问题
-
Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成,而插件本身并不包含在Maven的核心程序中。
-
当我们执行的Maven需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
-
本地仓库默认位置:[系统中当前用户的家目录(用户/User)]\.m2\repository
-
Maven的核心程序如果在本地仓库没有找到需要的插件,那么它会自动的连接外网,到中央仓库下载。如果此时无法连接外网,则构建失败。还
-
修改默认本地仓库的位置,可以让Maven核心程序到我们事先准备好的目录下查找插件。
-
-
找到Maven的解压目录\conf\settings.xml文件
-
在settings.xml文件中找到ocalRepository标签
-
将<localRepository>/path/to\local/epo</localRepository>从注释中取出来
-
将标签体内容修改成已经准备好的Maven仓库路径
-
二、Maven中的POM
-
含义:Project Object Model 项目对象模型的缩写
-
DOM: Document Object Model 文档对象模型
-
pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行。重要程度相当于web,xml对于动态Web工程。
三、Maven中的坐标(GAV)
-
数学中的坐标:在平面上使用x,y两个向量可以唯一定位平面中的任何一个点,在空间中使用x,y,z三个向量可以唯一的定位空间中的任何一个点。
-
Maven中的坐标 ,使用以下三个向量在仓库中唯一定位一个Maven 的工程
-
groupid:公司或组织域名的倒序+项目名, 例如:<groupid>com.csh.maven<\groupid>
-
artifactid:模块名,例如:<artifactid>Hello<artifactid\>
-
version:版本 例如:<version>1.3<versioin\>
-
Maven工程中的坐标与仓库中路径的对应关系:
四、 Maven仓库
1.分类:(本地仓库(当前电脑上的),远程仓库(局域网范围的 :私服(Nexus))、中央仓库、中央仓库的镜像)
-
远程仓库(私服):架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
-
中央仓库:架设在Internet上,为全世界所以的Maven工程服务。
-
中央仓库镜像:为了分担中央仓库的流量,提升用户的访问速度。
2.仓库中保存的内容:(内容定位参考GAV)
-
Maven自身所需要的插件
-
第三方框架或工具的jar包(第一方是JDK,第二方是开发人员)
-
我们自己开发的Maven工程