一、Maven是什么
Maven是一个Apache组织的开源项目,是用来构建项目和管理依赖的工具。Maven基于项目对象模型(POM project object model),通过一小段描述信息(配置/坐标)来管理项目的构建,报告和文档。
- 依赖管理:对项目需要使用到的jar包进行管理。
- 项目构建:项目在编码完成后,对项目进行编译、测试、打包(war)、部署。
二、Maven的优势
-
使用Maven管理的Java 项目都有着相同的项目结构
a. 有一个pom.xml 用于维护当前项目都用了那些jar包
b. 所有的java代码都放在 src/main/java
c. 所有的测试代码都放在src/test/java -
借助maven可以以规范的方式下载jar包
如果jar包在各个官网网站下载,会浪费很多时间,而且可能功能不全。借助maven可以以规范的方式下载jar包,因为所有的知名框架或者第三方工具的jar包已经按照统一的规范存放到了maven的*仓库中了。 -
更好的管理项目依赖的jar包
同样的jar包重复出现在不同的项目中,浪费空间,让工程变得更加臃肿。maven风格的项目,首先把所有的jar包都放在"仓库“ 里,然后哪个项目需要用到这个jar包,只需在项目中的pom.xml中要给出jar包的名称和版本号就行了,不用复制文件过来占用空间。 -
Maven项目会自动把一个jar包所依赖的其它jar包下载下来。
-
在maven项目编码完成后,可以对项目进行编译、测试、打包、部署
-
项目非常大时,可借助Maven将一个项目拆分成多个工程,最好是一个模块对应一个工程,利于分工协作。而且模块之间还是可以发送消息的
三、仓库的概念
刚才说过在项目中通过pom.xml中的配置,就能够获取到项目所需要的jar包,但是这些jar是在哪里呢,也就是我们从哪里获取到的这些jar包?答案就是仓库。仓库分为:本地仓库、*仓库、第三方仓库(私服)。
-
本地仓库
Maven会将项目中依赖的Jar包从远程服务器上下载到本机一个目录下管理,每个电脑默认的仓库是在 $user.home/.m2/repository下。
放在C盘有一点不好,重装系统就都没有了。一般我们会修改本地仓库位置,自己创建一个文件夹, 把仓库的位置修改为自己建的文件夹。
修改本地仓库位置:在maven安装目录下/conf/setting.xml文件中修改 -
*仓库
Maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目jar包。目前是以java为主工程。项目依赖的jar包如果本地仓库没有,默认从*仓库下载。 -
第三方仓库(私服)
第三方仓库,又称为内部中心仓库,也称为私服。一般是由公司自己设立的,只为本公司内部共享使用。使用私服可以减少在外部访问和下载的频率(使用私服为了减少对*仓库的访问),私服可以使用局域网,*仓库必须使用外网。一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。
注意:连接私服,需要单独配置。如果没有配置私服,默认不使用
从maven仓库获取jar包的过程
注意事项
maven 会默认从maven官方提供的服务器下载jar包。
而官方服务器在国外,因为大家都知道的原因,网速很慢,而且容易卡断。 为了便于快速下载相关jar包,可以使用国内maven 阿里云的下载地址:使用阿里云下载路径。
打开maven安装目录下conf/setting.xml
修改在mirrors下新加一个阿里云的镜像地址:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
四、Maven的安装与配置
- Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
系统要求:
项目 | 要求 |
---|---|
JDK | Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 |
内存 | 没有最低要求 |
磁盘 | Maven 自身安装需要大约 10 MB 空间。除此之外,额外的磁盘空间将用于你的本地 Maven 仓库。你本地仓库的大小取决于使用情况,但预期至少 500 MB |
操作系统 | 没有最低要求 |
-
Maven 下载
Maven下载地址:http://maven.apache.org/download.cgi
下载完之后解压到自己电脑上没有空格没有中文的文件夹里即可 -
配置环境变量
右键 “计算机”,选择 “属性”,之后点击 “高级系统设置”,点击"环境变量",来设置环境变量,有以下系统变量需要配置:
新建系统变量 MAVEN_HOME,变量值:D:\soft\apache-maven-3.5.4
编辑系统变量 Path,添加变量值:;%MAVEN_HOME%\bin
4.检验配置是否成功:用win键+R,来打开命令行提示符窗口,即Dos界面,输入mvn –version 若出现以下情况说明配置成功
五、使用Maven创建项目
Maven作为一种工具,可以创建标准化的Maven风格Java项目。 但是在实际工作中,很少有机会直接通过Maven 命令行来做到这一点。 通常都是在Eclipse或者IDEA中,通过集成Maven的方式来创建Java 项目。
六、Eclipse配置Maven
Eclipse已经支持MAVEN的了,无需额外手动集成。
步骤1 : 设置MAVEN路径
菜单->Window->Preferences->Maven->Installations-> 指定maven的安装目录
步骤 2 : 设置仓库路径
菜单->Window->Preferences->Maven->User Settings->
Global Settings 和 User Settings都使用:
七、在Eclipse中创建Maven项目
-
创建maven java桌面项目
-
第一步:选择菜单创建Maven项目
-
第二步:选择项目目录结构的骨架
-
第三步:输入项目相关信息
-
第四步:Maven桌面项目的目录结构
备注:因为这个步骤必须连接到Maven服务器获取相关信息, 如果配置和网络有故障则这个步骤就会出现错误!
如果出现错误请使用浏览器检测是否能够访问Maven服务器的URL.
-
-
创建Maven Web项目
- 第一步:选择菜单创建Maven项目
- 第二步:选择项目目录结构的骨架
- 第三步:输入项目相关信息
- 第四步:Maven war项目的目录结构
备注:因为这个步骤必须连接到Maven服务器获取相关信息, 如果配置和网络有故障则这个步骤就会出现错误!
如果出现错误请使用浏览器检测是否能够访问Maven服务器的URL. - 第五步:创建Web部署描述文件web.xml消除检测错误
- 第一步:选择菜单创建Maven项目
八、使用maven搭建SSH项目
在项目pom.xml配置项目SSH框架所需jar包的maven依赖如下:
<properties>
<spring.version>4.1.7.RELEASE</spring.version>
<hibernate.version>3.6.9.Final</hibernate.version>
</properties>
<!-- 配置项目依赖的jar包 -->
<dependencies>
<!-- spring配置 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringAOP需要依赖这个jar包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<!-- SpringMVC文件上传时依赖这个jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- hibernate 配置 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- mysql数据库的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 引入jstl包 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- 引入servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 引入Jackson相关依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
</dependencies>
九、setting.xml和pom.xml
从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xml是maven的全局配置文件。Settings.xml中包含类似本地仓库位置、修改远程仓库服务器、认证信息等配置。而pom.xml主要描述了项目的maven坐标,依赖关系以及其他所有的项目相关因素,是项目级别的配置文件。
Pom文件简解:
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模型版本。maven2.0必须是这样写,现在是maven2唯一支持的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->
<groupId>com.winner.trade</groupId>
<!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>trade-core</artifactId>
<!-- 本项目目前所处的版本号 -->
<version>1.0.0-SNAPSHOT</version>
<!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
<packaging>jar</packaging>
<!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件 不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->
<classifier>...</classifier>
<!-- 定义本项目的依赖关系 -->
<dependencies>
<!-- 每个dependency都对应这一个jar包 -->
<dependency>
<!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),-->
<!--就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->
<groupId>com.winner.trade</groupId>
<artifactId>trade-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。 -->
<!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->
<scope>test</scope>
<!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 -->
<optional>false</optional>
<!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
<properties>
<file.encoding>UTF-8</file.encoding>
<java.source.version>1.5</java.source.version>
<java.target.version>1.5</java.target.version>
</properties>
</project>
十、Maven常用命令
- mvn package 打包
- mvn clean 清空产生的项目( target里)
- mvn compile 编译源代码
- mvn test 运行测试
- mvn -Dtest package 只打包不测试
- mvn install 在本地repository中安装jar(包含mvn compile,mvn package,然后上传到本地仓库)
- mvn site 产生site
- mvn deploy 上传到私服(包含mvn install,然后,上传到私服)
- mvn test-compile 编译测试代码
- mvn jar:jar 只打jar包
- mvn test -skipping compile -skipping test-compile 只测试而不编译,也不测试编译
- mvn deploy
- mvn source.jar 源码打包