一、Maven的简介
1.1 Maven是什么
maven是apache下的一个开源项目,是纯java开发的,并且只是来管理java项目的。
1.2 Maven的好处
在项目体积上,maven项目的体积是非常小的,因为在项目中没有附带jar包的引用。
普通的传统项目
maven项目
maven的项目为什么这么小,是因为没有jar的原因。但是项目肯定是需要jar包的,只是jar没有存在maven项目里边,存到的另外的地方。
1.3 依赖管理
在项目的开发中,我们常常需要引用一些jar包,而这些jar也引用到别的jar,如此,我们就需要连同引用的jar包也需要找到。这样依赖我们就需要记住很多需要的jar包,有了maven,我们就可以只需要记住一个主要的功能jar包,对于这个jar包的引用,就可以自动的添加到项目中,十分方便。
1.4 项目的一键构建
使用maven之后,理论上来说,我们可以完全脱离ide,直接对写好的代码进行 编译、测试、运行、打包、部署等一系列操作,只需一个命令,我们就可以完成整个项目的构建。
1.5 总结
对jar包的统一管理
项目的一键构建
统一开发规范(文件目录结构,存储位置)
跨平台,应用于大型项目提高开发效率。
二、Maven的安装
2.1 maven的下载
下载地址:http://maven.apache.org/download.cgi
点击下载后 ,会有一个压缩文件
直接解压出来的文件夹就是我们要用的maven了。
2.2 配置环境变量
在path里边接入maven的文件夹,就是刚才解压出来的路径
运行mvn -version命令查看版本,如果输出如下,证明安装成功。
2.3 仓库
仓库是maven保存所有jar包的地方,默认maven会建立一个本地仓库,在当前用的的.m2的文件夹下面
我的是在:C:\Users\Emma\.m2\repository ,里边存了很多jar包
2.3.1 本地仓库
本地仓库就是你本机的仓库,上边就是一个本地仓库,你可以手动配置一下本地仓库的路径。修改conf配置中的settings.xml就可以设置本地仓库的路径。
2.3.2 远程仓库(私服)
公司提供的一个仓库,开发人员可以公用,由公司来维护。
2.3.3 中央仓库
全球的仓库,有maven团队来维护,存放了最全的jar包,还有开发者们提交的各种jar包。
三、Maven入门与配置
3.1 Maven的目录结构
3.2 pom.xml文件
pom.xml文件是maven项目的核心,它包含了一系列的jar包的依赖以及项目的信息,项目的一件构建执行命令都要从它里边获取相关配置信息。
下面就是一个pom.xml文件
<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>withmaven</groupId>
<artifactId>withmaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name/>
<description/>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
1. modelVersion
指定了当前maven模型的版本号,对于maven2或maven3来说,只能是4.0.0。
2. groupId
顾名思义,组的id,是公司名或者组织名,一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就 是"org";第二部分是公司名,比如"tengxun"、"baidu"、"alibaba";第三部分是你的项目名。
3. artifactId
可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式,比如spring若要作为一个maven项目,那么groupId可以是org.springframework,artifactId可以是springmvc或者springjdbc。
4. version
版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,这非常重要,我在使用和研究Maven的时候多次感受到了这点。
5. packing
项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar。
6. dependencies和dependency
前者包含后者。前面说了,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。
说到这里,就有一个本地仓库和远程仓库的概念了。官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。
本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。
举个例子,比方说我的项目中用到了MyBatis,那么可以这么配置:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
之前有说过groupId、artifactId、version唯一标识一个Maven项目,有了这三个元素,我们就可以去远程仓库下载MyBatis3.2.5.jar到本地仓库了。回想我们之前的做法,如果要MyBatis的jar包,发现没有,然后去网上下载一个,需要另外的jar包,然后去网上下载一个,但是有了Maven,就方便多了,只需要配置jar包对应的dependency依赖,Maven会自动帮助我们去远程仓库中下载jar包到本地仓库中。
7. properties
properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
8. build
build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。
9. plugins
构建所用的插件,也可以说执行某些命令时所用到的插件,比如我们可以直接执行tomcat:run就可以启动一个项目而不需要部署发布到tomcat,甚至不需要下载tomcat,这是因为maven中有tomcat-plugin这个插件。
3.3 maven常用命令
3.3.1 clean
clean 清理命令,来清理编译过的文件,即删除target目录
3.3.2 compile
compile 编译命令,编译src中的java代码,生成target目录。
3.3.3 test
test 测试命令 用来编译运行测试
3.3.4 package
package 打包命令,把项目打成jar或者war包
3.3.5 install
install 安装命令 把自己开发的包(多指jar包)安装到本地仓库,大项目中你自己开发包可能别的模块要用就要安装到本地,以供其他项目来使用。
四、项目构建
4.1 Maven4MyEclipse配置
默认MyEclipse自带的有maven,配置啥的都是默认的,如果你重新安装了maven,要使用新的maven,那么就要配置一些路径
然后打开,修改你自己的maven路径
用户设置
我这里是提前设置了自己的maven的配置文件和本地仓库地址,然后配置到MyEclipse中去,这样的话这写目录自己就比较了解和清晰了。
4.1 第一个maven项目
由于MyEclipse版本各部项目,创建maven项目的方式也不一样,我们就不再写创建maven项目的过程了,根据提示相信大家都能找到怎么创建项目
创建的项目如下
创建之后可能会报错,因为有些包可能没有。右键该工程,找到如下菜单,更新依赖包
注意了,由于默认的远程中央仓库地址是国外的,可能被墙,几乎所有的包都会更新失败,所以我们要配置一下远程仓库的地址,也就是镜像,这里我们要配置成阿里云的镜像地址。
打开maven的settings.xml文件,找到<mirrors>节点,加入如下代码
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
这样的话我们就能成功的更新所有的依赖包了,更新完之后maven项目就不会有什么红叉了
4.2 配置springmvc项目
4.2.1 添加配置
如图:
按照传统的mvc项目的配置添加控制器和配置文件,配置内容都一样 springmvc.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 配置controller扫描包 -->
<context:component-scan base-package="com.baidu.web" />
</beans>
4.2.2 web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<!-- 配置SpringMVC前端控制器 -->
<servlet>
<servlet-name>springmvc-first</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定SpringMVC配置文件 -->
<!-- SpringMVC的配置文件的默认路径是/WEB-INF/${servlet-name}-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-first</servlet-name>
<!-- 设置所有以action结尾的请求进入SpringMVC -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置完成之后,项目右键-Run As - Maven build... 使用package命令 打包,然后把target目录中打好的war包部署到tomcat服务器就可以运行成功了。
五、总结
总结起来,maven为我们提供了管理包的依赖和项目的构建,提高了我们的开发项目,规范了我们的开发方式。