1,什么是Maven?(What)
maven是一款服务于Java平台的自动化构建工具
麦文,妹文,美文
make-->ant-->maven-->gradle
何为构建?
构建并不是简单的创建。构建是以“Java源文件”,“框架配置文件”,“JSP”,“HTML”,
“图片”等资源为原材料,去生产一个可以运行的项目的过程。
注意点:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”。
动态Web工程本身====》编译的结果
仔细分别观看动态Web工程本身和它编译的结果两者工程“目录结构”的异同点。(重点)
Tips:为什么使用Maven?(Why)
关键词:jar包,项目、工程、模块
2,Maven的下载,安装和配置(叫Maven核心程序)(How)
下载:Maven官网 maven-3.5.4.zip
安装:解压下载下来的zip压缩包,apache-maven-3.5.4,观看各个目录(重点conf/settings.xml)
配置:(tips:Maven是用Java语言开发的,所以它也是运行在JVM当中,必须检查JAVA_HOME
环境变量是否配置)
检查JAVA_HOME环境变量是否配置?Win+R-->cmd-->echo JAVA_HOME
MAVEN_HOME或者M2_HOME(选用):Maven解压目录
PATH:Maven解压目录\bin
测试是否安装成功?mvn -v或者mvn --version或者mvn -version
3,构建过程中的各个环节
清理:将以前编译好的Class字节码文件删除,干嘛?为下一次编译做准备
编译:将Java源程序(User.Java)编译成Class字节码(User.class)文件,交由Java虚拟机(JVM)去执行
测试:自动测试,自动调用junit程序
报告:测试程序执行的结果
打包:动态Web工程打war包,Java工程打jar包
安装:这个概念很重要,它是Maven特有的一个概念,讲解 :将我们自己开发好的Maven工程打包所得到的文件
”复制粘贴“到“仓库”中
部署:将动态Web工程打包得到的war包“复制粘贴”到“Servlet容器“中的指定目录中,使其可以运行起来
4,Maven的几个常用的命令
tips:执行与构建过程相关的maven命令需要进入pom.xml文件所在的目录
清理:mvn clean
编译主程序:mvn compile
编译测试程序:mvn test-compile
测试:mvn test
打包:mvn package
安装:mvn install
部署:mvn deploy
生成站点:mvn site
5,Maven中的几个重要的概念
约定的目录结构
POM
坐标
仓库
依赖
生命周期,阶段,插件,目标
继承
聚合
6,约定的目录结构
根目录:工程名,模块名
src目录:源代码
pom.xml文件:这个文件很重要,它是此Maven工程的核心配置文件(全局配置文件),有关
此工程的大部分操作都要在这里面进行配置
main目录:存放主程序
test目录:存放测试程序
java目录:存放Java源文件
resources目录:存放知名框架或者第三方工具的配置文件
层级结构:
Hello
src
main
java
resources
test
java
resources
pom.xml
7,POM
POM,Project Object Model,项目对象模型
类比,DOM
pom.xml文件,对于Maven工程而言重要性相当于web.xml文件对于动态Web工程
8,坐标(gav)
Maven中的坐标,通过坐标可以在仓库中唯一的定位一个Maven工程。
groupid:公司或组织域名倒叙+项目名
artifactid:模块名或者叫做工程名
version:版本
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
org/springframework/spring-core/4.3.7.RELEASE/spring-core-4.3.7.RELEASE.jar
9,仓库
分类:本地仓库,布置在本机上面,只为当前电脑上的所有Maven工程所服务,
远程仓库,
私服,在这里我们需要学习去如何搭建一个私服,存在于局域网环境上,
只为此局域网环境内的Maven工程所服务
中央仓库,架设在整个大Internet网络上,为全世界所有的Maven工程所服务
中央仓库镜像,为了分担中央仓库的流量,提升用户访问速度,提高用户体验
本地仓库的默认位置,登录当前系统用户家目录\.m2\repository
修改本地仓库的默认位置,apache-maven-3.5.4\conf\settings.xml
<localRepository>D:\DevInstall\MavenRep</localRepository>
其它的一些重要的配置,(settings.xml)
所有Maven工程jdk一劳永逸配置(jdk1.8)
<profiles>
<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>
</profiles>
借用阿里云仓库
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
9,依赖(很重要很重要)
最低要学会如何在我们开发的项目中导入我们所需要的依赖!!!
依赖,初步
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
(这就是一个依赖,)
依赖的范围,主要用到三个compile,test,provided
<scope>compile</scope>
典型例子 依赖的范围
spring-core compile
junit test
servlet-api provided
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
依赖的传递性
如果多个模块工程需要相同的依赖,则只需要在“最下面”的工程引用一次依赖即可,它“上面的”
工程中也就导入了相应的依赖。
maven也会自动导入此依赖所需要的其它的依赖信息
依赖的原则
就近原则,路径最短者优先原则。
相同路径,先声明者优先原则
依赖的原则测试
依赖的排除
如果我们觉得某些jar包不够稳定,可以将它排除出去
<dependency>
......
<scope>...<scope>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
统一管理依赖的版本号
<properties>
<atguigu.spring.version>4.0.0.release</atguigu.spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aa.bb.cc></aa.bb.cc>
</properties>
10,继承
由于非compile范围的依赖不能传递,所以这些依赖就很容易存在于各个模块工程中。
典型例子:junit,各个模块工程中的junit版本不一致,容易出现问题。定义一个父工程来统一
管理这些依赖。
父工程Parent
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <!--打包方式-->
<dependencyManager>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
<dependencies>
</dependencyManager>
其他的子工程引用这个父工程就可以了,子工程就有父工程所有的依赖信息了。
<parent>
<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
11,聚合
一键“安装”各个参与聚合的模块工程!
<modules>
<module>../Hello/pom.xml</module>
<module>../HelloFriend/pom.xml</module>
<module>../MakeFriends/pom.xml</module>
<module>../OurFriends/pom.xml</module>
</modules>
12,分别在eclipse中,idea中使用Maven。
使用maven来创建一个Java工程
使用maven来创建一个动态Web工程
执行命令
13,Maven酷站
maven repository
maven rep
搜索详细的依赖信息
=========================================================================
大家可以在CSDN上面下载我的关于Maven的资料
更多技术分享加QQ:2040423570