Maven详细入门配置介绍
Maven的介绍
什么是Maven
- maven翻译为“专家”,“内行”。Maven是Apache下的一个纯java开发的开源项目,它是一个项目管理工具,使用maven对java项目进行构建、依赖管理。当前使用Maven的项目在持续增长。
- Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
- Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
- 一个jar包,会有两种下载的方式。一种是直接下载压缩包,一种是提供maven下载路径。Maven最方便的就是能帮我们下载jar包。告别传统手动导包的方式。
传统的项目构建
-
项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程
-
传统的使用eclipse构建项目的过程如下:
构建过程如下:
1)在eclipse中创建一个java web工程2)在工程中编写源代码及配置文件等
3)对源代码进行编译,java文件编译成class文件
4)执行Junit单元测试
5)将工程打成war包部署至tomcat运行
Maven的项目构建过程
-
maven将项目构建的过程进行标准化,每个阶段使用一个命令完成,下图展示了构建过程的一些阶段
-
上图中部分阶段对应命令如下:
-
清理阶段对应maven的命令是clean,清理输出的class文件
-
编译阶段对应maven的命令是compile,将java代码编译成class文件。
-
打包阶段对应maven的命令是package,java工程可以打成jar包,web包可以打成war包
运行一个maven工程(web工程)需要一个命令:tomat:run maven工程构建的优点:
-
一个命令完成构建、运行,方便快捷。
-
maven对每个构建阶段进行规范,非常有利于大型团队协作开发。
传统项目的依赖管理
-
就是对项目所有依赖的jar包进行规范化管理。一个java项目可能要使用一些第三方的jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包。
-
举个例子:一个crm系统,它的架构是SSH框架,该crm项目依赖SSH框架,具体它依赖的Hibernate、Spring、Struts2。
-
传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中,如下图:程序员手工将Hibernate、struts2、spring的jar添加到工程中的WEB-INF/lib目录下。
-
手工拷贝jar包添加到工程中的问题是:
1、没有对jar包的版本统一管理,容易导致版本冲突
2、从网上找jar包非常不方便,有些jar找不到。
3、jar包添加到工程中导致工程过大。
Maven项目的依赖管理
-
maven项目管理所依赖的jar包不需要手动向工程添加jar包,只需要在pom.xml(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:
-
使用maven依赖管理添加jar的好处:
1、通过pom.xml文件对jar包的版本进行统一管理,可避免版本冲突。
2、maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven 工程可以自动从maven仓库下载jar包,非常方便。
使用maven的好处
通过上边介绍传统项目和maven项目在项目构建及依赖管理方面的区域,maven有如下的好处:
1、一步构建
maven对项目构建的过程进行标准化,通过一个命令即可完成构建过程。
2、依赖管理
maven 工程不用手动导jar包,通过在pom.xml中定义坐标从maven仓库自动下载,方便且不易出错。
3、maven的跨平台,可在window、linux上使用。
4、maven遵循规范开发有利于提高大型团队的开发效率,降低项目的维护成本,大公司都会考虑使用maven来构 建项目。
Maven的安装
下载安装
- 官网下载地址:https://maven.apache.org/download.cgi
- 将maven解压到一个不含有中文和空格的目录中。
环境变量配置
- Maven 3.3+ require JDK 1.7 or above to execute - they still allow you to build against 1.3 and other JDK versions by Using Toolchains
- 电脑上需安装java环境,安装J0K1.7+版本(将JAVA_HOME/bin配置环境变量path)配置MAVEN_HOME
- 将%MAVEN_HOME%/bin 加入环境变量path
- 通过mvn-v命令检查maven是否安装成功,看到maven的版本及java版本为自己安装的版本即为安装成功。
Maven仓库
仓库的作用
-
maven的工作需要从仓库下载一些jar包本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
-
本地仓库:
用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找
默认本地仓库位置在S{user.dir]/.m2/repository,S{user.dir}表示windows用户目录。 -
远程仓库:
如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内。 -
中央仓库: 在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
配置本地仓库
-
在MAVE_HOME/conf/settings.xml文件中配置本地仓库位置:
Maven入门
-
Maven项目工程目录约定
使用maven创建的工程我们称它为maven工程,maven工程具有一定的目录规范,如下:
-
src/main/java——存放项目的.java文件
-
src/main/resources—-存放项目资源文件,如spring,hibernate配置文件
-
src/test/java——存放所有单元测试,java文件,如JUnit 测试类
-
src/test/resources——测试资源文件
-
target——项目输出位置,编译后的class文件会输出到此目录
-
pom.xml—-maven项目核心配置文件
-
-
项目目录约定
-
compile
compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。
cmd进入命令状态,执行mvn compile
查看target目录,class文件已生成,编译完成。 -
test
test是maven工程的测试命令,会执行src/test/java下的单元测试类。
cmd执行mvn test执行src/test/java下单元测试类 -
clean
是maven工程的清理命令,执行clean会删除target目录的内容。 -
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。 -
install
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库。
声明周期
-
maven对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:
-
Clean Lifecycle在进行真正的构建之前进行一些清理工作。
-
Default Lifecycle构建的核心部分,编译,测试,打包,部署等等。
-
Site Lifecycle生成项目报告,站点,发布站点。
-
概念模型图
-
一个项目生命周期(Project Lifecycle)
使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段:
Eclipse中对Maven进行项目构建
添加Maven
-
为了使得Eclipse中安装的Maven插件(现在下载的Eclipse办版本较高自带的Maven),同windows中安装的那个相同,需要让eclipse中的maven重新定位一下,点击Window->Preference->Maven->Installation->Add进行设置。如图:
-
配置Maven本地仓库,首先我们来看一个文件,文件放在maven的安装目录下面的conf子目录下面,大家打开这个文件夹可以看到有个叫settings.xml的文件夹,这个里面包含仓库地址、镜像、插件、代理等配置,也是maven中一个核心配置文件,在后面我们会经常跟她打交道。下面我来看看这个文件以及如何配置本地仓库。
在eclipse中,点击Window->Preference->Maven->User Settings进行设置。如图:
创建web项目
-
在eclipse中用maven创建项目,右键new>>Maven Project
-
输入Maven配置信息
-
刚创建完的新Maven项目会报错误(原因是缺少web.xml文件)
方式一:
手动添加WEB-INF文件和web.xml文件
方式二:(推荐)
右击该maven 项目,找到ProjectFacets取消选中Dynamic Web Module选项,点击应用,再选中Dyanmic Web Module,就会出现一个选项卡
在Content directory填写src/main/webapp
之后就会在生成两个文件夹
-
处理编辑版本,把更改 jre的版本,更改为javaSE-1.8(自己的版本对应)
方法一:右键项目->build path->configure build path;然后点击Libraries,双击JRE选择javaSE-1.8(根据自己版本选择)
-
项目开发时候遇到点击maven update project,项目引入的jdk或者jre会变回1.5版本
-
解决办法:
第一步:
在pom.xml里添加下面代码修改成jdk1.8的,这里由于本人用的是jdk1.8的,所以这里填了1.8,如果用jdk1.7的就填1.7,自己对应去填<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
第二步
右键点击项目,到properties里设置一下,这里选择1.8跟上面对应的
-
添加依赖的jar包和插件
-
从网上搜索:百度maven仓库http://mvnrepository.com/tags/maven
这网上收索的要自己加跟元素;依赖jar包需要加<dependencies>
插件需要<build>元素和<plugins>元素 -
利用本地仓库,在eclipse建立索引,方便收索jar包
打开Maven视图(window-show View-other)
-
在本地仓库重建索引(可以很方便的对pom.xml文件进行配置)
-
添加的方法:
-
点击pom.xml
-
A填写需要的jar包名,C是选择版本,B是作用范围:
compile 在编译时,测试时,运行时(即打包的时候也要)需要这个jar包【举例:struts2-core】;
provided 编译时,测试时需要这个 jar包,运行时(打包)不需要【举例:jsp-api.jar;servlet-api.jar】;
runtime测试时,运行(打包)时需要这个jar包,编译时不需要【举例:数据库驱动包】;
Test 测试需要这个jar包,编译时,运行时(打包)不需要
-
需要手动更新下项目,jar包才对加进去在项目上右键鼠标-》Maven-》update project
-
-
用maven运行项目
- A是用来输入maven命令的,B是以前输入的maven命令
- tomcat:run默认是6;tomcat7:run是运行7;这里运行的tomcat都不是自己下载的,都是maven的tomcat插件
<build> <plugins> <!-- 配置了很多插件 --> <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> <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>
- A是用来输入maven命令的,B是以前输入的maven命令
-
Maven的debug
点击需要debug需要的项目