文章目录
Maven
1 简介
介绍
- Maven这个词翻译为(”专家”,”内行”),是跨平台的项目管理工具。
- Maven主要服务于基于Java平台的项目构建,依赖管理,项目信息管理,它是基于项目对象模型(POM)的概念
1 项目构建的过程
【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。
2 依赖管理
依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。
2 安装Maven
1.确保电脑上安装了JDK,并且JDK环境变量配置正确
2.下载Maven
http://maven.apache.org
3.解压(注意:不要解压到中文目录)
4.配置环境变量
(变量名 M2_HOME 变量值 Maven的安装目录)
(变量名 path 变量值 Maven的bin路径)
5.在cmd中输入 mvn -v 显示出了maven 的版本,就代表maven软件安装成功了。
maven解压后的目录结构
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
conf:含有settings.xml配置文件
lib:含有Maven运行时所需要的java类库
3 Maven的仓库
1 何为Maven仓库
以前传统的开放模式中,每个项目都有lib目录,各个项目lib目录下的内容存在大量的重复,这样不仅造成磁盘空间的浪费,而且也难 于管理。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)
在maven中存放jar包的文件夹称为仓库,仓库一般放在本地磁盘。
2 仓库的分类
- 对于Maven来说,仓库只分为两类:本地仓库和远程仓库。
- 当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果 本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,Maven就会去远程仓库查找,发现需要的构件,下载到本地仓库再使用。如果本地仓库和远程仓库都没有,Maven就会报错。(孝明上次那个问题)
- 私服是一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。
-
本地仓库
- 默认情况下,本地仓库地址为C:\Users\用户名.m2\repository\,有时候,因为某些原因(C盘空间不够,系统盘),需要自定义本地仓库的目录地址
-
远程仓库
-
当用户执行maven命令之后,Maven会根据配置和需要从远程仓库下载构件到本地仓库。
-
这好比藏书,例如我要读<红楼梦>,会先检查自己的书房是否藏了这本书,如果发现没有这本书,于是就跑去书店买一本回来,放在书房里。
-
本地仓库就好比书房,我需要读书的时候先从书房找,相应的,Maven需要构件的时候,先从本地仓库找。当无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件到本地仓库。
-
-
私服
- 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的用户使用。当Maven需要下载构件的时候,它从私服请求,如果 私服上不存在该构件,则从外部远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
-
仓库搜索服务
- 使用Maven开发项目时,经常需要寻找依赖,我们可能只知道使用的类库的项目名称,但添加Maven依赖要求提供确切的Maven坐标。这是就可以使用仓库搜索服务来根据关键字得到Maven坐标。
- 地址:http://mvnrepository.com/
3 本地仓库配置
1.在某个盘符下新建一个英文文件夹作为我们的maven本地仓库
2.修改Maven->conf->settings.xml(自定义Maven的本地仓库路径)
3.把第53行代码复制到注释的外面,把路径改成我们刚才创建的文件夹路径
4.在settings.xml文件的第146-159行配置Maven的中央仓库的镜像为阿里的镜像,配置代码如下
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4 Maven常用命令 (了解)
mvn clean是 maven 工程的清理命令
会对target目标目录所有的内容进行删除
mvn compile是maven工程的编译命令
对maven项目中的所有的位于 src/main/java 下的文件编译为 class 文件输出到 target目录下
mvn test 是 maven 工程的测试命令
会执行位于 src/test/java 下的单元测试类 [自动编译测试类所有@Test单元测试方法]
mvn package是maven工程打包的打包命令
对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包 放在target目录中
mvn install 是maven工程的安装命令
将package打成jar包放到本地仓库中,供其他项目的添加dependency依赖,就可以使用了
注意:
从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行
Maven命令的执行是有顺序的,每执行一个命令,都会从第1个clean命令开始执行
1 Maven自动构建java project项目
使用mvn archetype:generate创建项目,命令如下所示:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Maven工程目录结构
2 执行:mvn package 打包命令
package构建成功后,会在target目录下生成myapp-1.0-SNAPSHOT.jar包
3.执行 mvn install 安装命令
install构建成功,就会将项目的jar包安装到本地仓库,如下图。
5 Maven坐标
什么是坐标?
在平面几何中坐标(x,y)可以标识平面中唯一的一点。
为什么要定义Maven坐标?
在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能应用该项目生成的依赖。
Maven坐标详解
groupId:组织标识(包名)
artifactId:项目名称
version:项目的当前版本
packaging:项目的打包方式,最为常见的jar和war两种,默认jar
样例
6 依赖管理
依赖管理是Maven一个主要的功能,由传统的项目中jar包管理到Maven仓库形式管理,多个项目共享同一依赖。
依赖配置
详解每个依赖可以包含的元素:
groupId,必选,实际隶属项目 (基本坐标)
artifactId,必选,其中的模块 (基本坐标)
version必选,版本号 (基本坐标)
type可选,依赖类型,默认jar
scope可选,依赖范围,默认compile
optional可选,标记依赖是否可选,默认false
exclusion可选,排除传递依赖性,默认空
大部分依赖声明只包含基本坐标。
依赖范围
maven项目有三种classpath(编译,测试,运行)
scope用来表示与classpath的关系,总共有五种
compile:编译,测试,运行
test:测试
provided:编译,测试
runtime:运行
system:编译,测试,同provided,但必须指定systemPath,慎用
依赖范围有效运行期:
可选依赖
- 有时候我们不想让依赖传递,那么可配置该依赖为可选依赖,将元素optional设置为true即可,例如:
- 那么依赖该项目的另一项目将不会得到此依赖的传递。
排除依赖
- 当我们引入第三方jar包的时候,难免会引入传递性依赖,有些时候这是好事,然而有些时候我们不需要其中的一些传递性依赖。如当我们引入spring包时,我们不想引入传递性依赖commons-logging,我们可以使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。
依赖归类
- 如果我们项目中用到很多关于Spring Framework的依赖,它们分别是org.springframework:spring-core:2.5.6, org.springframework:spring-beans:2.5.6,org.springframework:spring-context:2.5.6,它们都是来自同一项目的不同模块。因此,所有这些依赖的版本都是相同的,而且可以预见,如果将来需要升级Spring Framework,这些依赖的版本会一起升级。因此,我们应该在一个唯一的地方定义版本,并且在dependency声明引用这一版本,这一在Spring Framework升级的时候只需要修改一处即可。
7 Eclipse集成maven
1 集成
1.Window->Preferences->Maven->Install…->add->选择本地的maven安装路径
2.Window->Preferences->Maven->User settings->修改为Maven的配置文件(settings.xml)路径
2 创建Maven项目(普通项目和web项目)
使用Maven创建普通java项目
使用Maven创建普通javaWeb项目
1.修改项目的默认的jdk版本
在项目的pom.xml文件中加如下内容
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
项目上鼠标右键->Maven->update Project
项目上鼠标右键->properties->java builder path->
查看jdk版本是否正常
2.如果创建的是web项目,需要把tomcat加载到项目中
标准的Maven项目格式
8 IntelliJ Idea集成Maven
a、IDEA配置Maven
file->Setting->在搜索框搜索Maven
b、创建普通java项目和web项目
maven生成的web项目结构如下
上图的结构并不是一个完整的maven工程结构,需要手动补齐
c、创建并配置源码目录
在main目录上右键
将main下的java目录设为源码的根目录
在java目录上右键
d、创建resources静态文件目录
在main目录上右键
将main下的resources设为静态文件根目录
e、maven创建的web工程完整结构如下
f、设置pom
添加jsp与servlet支持jar坐标
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
在maven中有一个tomcat插件,可以代替我们自己安装的tomcat,并且速度更快,只需要在pom中设置即可
<build>
<!--配置mavenxyna插件版本-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<target>1.8</target>
<!-- 源代码使用的开发版本 -->
<source>1.8</source>
<!-- 需要生成的目标class文件的编译版本 -->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!--maven tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration> <!--请求路径-->
<path>/</path> <!--指定端口-->
<port>8080</port> <!--配置tomcat插件编码格式-->
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
发布项目
方式一
方式二