一、Maven认识
依赖管理:Maven工程对jar包的管理过程。
相当于把jar包抽取出来,每个项目都通过坐标字jar包仓库找到相应的jar包。
不必每个项目都放一份jar包了
代码可重用,减少耦合性。
Maven的一键构建和本地安装tomcat的一键构建:
构建项目:我们之前使用本地安装的tomcat对项目进行编译,测试,运行,打包,安装,部署
的任何一步操作都是在构建项目。只不过是这些操作对项目构建的程度不一样而已。
Maven的一键构建:我们不在使用本地安装的tomcat,而是使用maven自身集成的tomcat插件来
完成这些操作的过程,则就是maven的一键构建。
不同:
1.本地tomcat:我们必须把整个项目打包放到webapps目录下,然后bin目录下找到startup
,才能把项目运行起来。
2.Maven运行一个项目:
Maven解压后的目录结构:
bin/mvn : 用来构建项目
boot/plexus-classworlds-2.5.2.jar : maven自身运行所需要的类加载器
conf/settins.xml : 我们对maven进行配置时主要使用的配置文件。
lib/... : 许多maven自身运行所依赖的jar包。里面一定集成的有tomcat插件,因为maven
是可以有自己的tomcat插件来构建项目的
环境变量配置:
MAVEN_HOME :D:\Developer_Tools\apache-maven-3.5.2
Path : %MAVEN_HOME%\bin
注意:MAVEN运行时,需要依赖JAVA_HOME,我们必须确保我们的环境变量中有JAVA_HOME。
修改本地jar包仓库的位置:
jar包仓库:本地仓库,Default: ${user.home}/.m2/repository
当我们启动一个maven工程的时候,默认回去系统盘找本地jar包仓库---本地仓库。
maven刚安装完时,本地仓库里是没有jar包的。但是如果我们的电脑是联网的,可以自己找
到一个叫做中央仓库的地方,直接自己下载坐标对应的jar包。
即我们启动一个maven工程,首先是通过坐标到本地仓库找jar包。
远程仓库:私服
一般我们不需要中央仓库里所有的jar包,为了在不联网的情况下可以开发,也为了我们
公司自己内部项目所需要的jar包可以直接放到一个统一的地方,我们会在创建一个仓库----
远程仓库。别名---私服
在公司中我们只需确保,自己的电脑和远程仓库在同一个局域网,就可以直接通过局域网
从远程仓库下载jar包。如果还是没有,可以本地上传,也可以去中央仓库下载。
修改:settins.xml
<localRepository>D:\Developer_Tools\maven_repository</localRepository>
其中:D:\Developer_Tools\maven_repository 就是我们新的本地仓库。
1.Maven标准目录结构:
我们最终开发完的项目,代码应该分几部分?
* 核心代码部分:肯定要打成jar包,发布到线上变成产品,供用户使用。那么用户的使用
就预示着我们要根据用户的体验度要不断的对项目进行维护和升级,每一次的升级都会
导致把代码重新打jar包,有些要频繁修改的部分,我们难道也要频繁的打jar包吗?
--------需要配置文件部分来改善。
* 配置文件部分:配置文件我们并不打到java代码中,最终打成jar包的时java代码,而
配置文件时jar包之外的东西。所以我们即便频繁修改配置文件也不用重新打jar包,只
需要重新启动一下项目即可。
* 为了确保核心代码正确率足够高,我们就要做大量的单元测试,这些单元测试组成了第
三部分-----测试代码:
* 测试代码肯定它需要用到它自己测试的配置文件----测试配置文件
所以最终的项目:4部分。
1.1传统项目:
项目名
src
那么将开发完的项目的4部分都放到src,就很容易发生打包混乱。你可以通过在建立一些
文件夹来分别放着4部分,比如config,resources...这样虽然在打包时分门别类清晰许多。
但是这是你自己建立的文件夹,没有统一的标准,别人不一定看得懂。
1.2统一的标准:maven项目标准目录结构
Maven的java工程:
src/main/java目录 : 核心代码部分
src/main/resources: 配置文件部分
src/test/java目录 : 测试代码部分
src/test/resources: 测试配置文件
Maven的web工程:
src/main/java目录 : 核心代码部分
src/main/resources: 配置文件部分
src/test/java目录 : 测试代码部分
src/test/resources: 测试配置文件
src/main/webapp : 页面资源,js,css,图片等等。
2.Maven常见的命令
mvn clean:把编译好的项目中的信息直接删掉。当我们进入公司之后,如果领导让我们接着
另外一个的项目进行开发,那么我们拿到他的项目之后,里面会包含很多本地编
译好的信息。那么我们要想将他的项目导入到本地环境,我们必须先执行mvn clean
命令删除他本地编译的所有信息。因为开发中我们每个人的开发环境不一定都是
相同的,他编译的代码,在我们的电脑上不一定运行的通。
mav compile(编译): 将src/main/java目录下的代码进行编译。放置在了target目录下。
mvn test:将src/test/java目录和src/main/java目录下的代码都编译,放在了target目录下。
mvn package:会将src/test/java目录和src/main/java目录下的代码都编译,同时将项目打成
war包/jar包,根据pom.xml中的配置来决定时war还是jar。
mvn install: 会将src/test/java目录和src/main/java目录下的代码编译,而且打包,还把这个包(项目)安装到了本地仓库
* 小结:执行后面的命令会将前面的命令在执行一次。(除了 mvn clean)
3.Maven的生命周期
maven有一个核心功能:一键构建。就是我们使用maven自身集成的tomcat插件对项目进行构建。
构建的步骤:编译, 测试, 打包, 安装, 发布
compile, test, package, install, deploy
如果项目是在我们自己电脑上从头到尾开发完的,我们直接编译即可。但是有些
项目在别的电脑上进行了一些编译,测试,打包,安装,发布等操作的话。我们接手该项
目后,必须清除掉之前在别人电脑上的一些编译信息-------执行mvn clean。
上面我们知道:执行后面的命令会将前面的命令在执行一次。那么这5条命令:
compile, test, package, install, deploy之间好像有一定的关系。
3.2 什么关系呢?
这5套命令其实是一套生命周期。这5个命令所在的生命周期叫做默认生命周期。
compile, test, package, install, deploy
* 清理生命周期:而clean是一套独立的生命周期,清理生命周期。
* 站点生命周期:用的不多,不做解释。
4. Maven概念模型图
1.项目对象模型(POM):指的就是maven工程中的pom.xml文件。打开一个pom.xml看一下:
```
<!-- 这些是项目 自身的信息i -->
<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-helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>第一个maven工程</name>
<description>第一个maven工程</description>
<!-- 项目运行所依赖的jar包 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- 配置了很多插件 -->
<build>
<plugins>
<!-- 插件1:JDK插件 -->
<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>
<!-- 插件2:tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9090</port>
<path>/mgr</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
```
* 项目对象模型中主要放置:
项目自身信息,项目运行所以来的jar信息,运行环境信息(JDK,tomcat)
2:依赖管理模型:Dependency
其中项目对象里面放置项目运行所依赖的jar包信息独立出来,变成依赖管理模型。依赖管理模型里面放置的全都是jar包的坐标
```
<dependency>
<groupId>javax.servlet.jsp</groupId> 1.公司组织的名称
<artifactId>jsp-api</artifactId> 2.项目名
<version>2.0</version> 3.版本号
<scope>provided</scope>
</dependency>
```
jar包的信息最少由必要的三个基本信息组成:
1.公司组织的名称
2.项目名
3.版本号
* 当我们在运行一个maven工程的时候,永远第一步先从本地(local)仓库找jar包,
第二包从远程仓库(b2b,私服)找jar包,第三部从中央仓库或者本地上传jar包
。
* 上面两个模型总体上是讲maven的第一大功能:依赖管理,即项目对jar包的管理过程。
3.构建生命周期:
* 最常用的是用来构建项目的默认生命周期:
compile,test,package,install,depoly。
*每一个命令都对应了maven底层的一个插件:
构建生命周期需要很多插件的支持:构建项目时maven底层会有若干插件在工作。
* 构建生命周期其实说的是maven的第二大功能:一键构建项目
4.maven的概念模型图:
展示了maven两大核心功能:底层分别都在怎么做。
二、Maven如何集成插件
如果我们想使用IDEA来开发Maven工程,前提必须IDEA集成了安装好的Maven工具才可以。
那么要做IDEA集成Maven前提条件:本地必须有安装好的Maven。
* 1.解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
原因:根据archetype创建maven项目会从网络下载catalog文件,导致创建maven项目缓慢
IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令
执行时,需要指定一个archetype-catalog.xml文件。
该命令的参数-DarchetypeCatalog,可选值为:remote,internal ,local等,用来
指定archetype-catalog.xml文件从哪里获取。
默认为remote,即从 http://repo1.maven.org/maven2/archetype-catalog.xml路径
下载archetype-catalog.xml文件。
http://repo1.maven.org/maven2/archetype-catalog.xml 文件约为3-4M,下载速度很慢,
导致创建过程卡住。
而且如果没有联网的话,就不能创建maven工程了。
* 解决:
在maven的VM Options加上-DarchetypeCatalog=internal参数,如下:
2.如何使用IDEA创建一个Maven的JAVA工程:使用骨架
右侧是IDEA为我们提供好的很多直接可以创建出可以运行的Maven工程的骨架,也叫模版。
如果要使用这些骨架,前提条件是可以联网;或者不联网但是你配置了从本地寻找骨架资源的属
性。
要使用时,勾选上 Create from archetype。此时就可以使用右侧提供好的骨架。
使用骨架来创建一个Maven的Java工程:
找到maven-archetype-quickstart,它就是IDEA为Maven提供好的创建Java工程的骨架。
* 初次使用骨架创建maven工程,速度会较慢。要从网上下载创建maven骨架所需要的插件。
而且目录结构少了src/main/resources和src/test/resources目录
3.如何使用IDEA创建一个Maven的JAVA工程:不使用骨架
里面没有小demo,目录结构只少了src/test/resources
4.使用IDEA创建一个Maven的WEB工程
5.任何把一个包变成资源包
6.导入项目依赖的jar包
我们刚才新创建的MavenWeb项目工程,这个项目中本来就一个jar都没有。需要我们手动导
入jar包,就要在web.xml写入依赖:
```
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
```
如果我们本地仓库有需要导入的jar包,那么我们写这些jar坐标时,IDEA给给出强大的提
示,写起来很方便。
如果我们本地仓库没有jar包,那么我们就要去中央仓库:https://mvnrepository.com/
找到需要的jar包,然后将坐标和写到web.xml中,IDEA就会自动下载到仓库中。
Servlet定义了
web.xml也配置了(没用注解配置)
pom.xml中tomcat插件也配置了