Maven简介
什么是Maven
是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的。
Maven的好处
传统开发 | Maven开发 |
---|---|
我们划分模块时,都是使用package来进行划分。但是,当项目很大时,有很多子模块时,即使是package来进行划分,也是让人眼花缭乱 | 项目非常大时,可借助Maven将一个项目拆分成多个工程,最好是一个模块对应一个工程,利于分工协作。而且模块之间还是可以发送消息的 |
同一项目的jar包复制和粘贴到WEB/INF/lib下,导致同样的jar包重复出现在不同的工程中,一方面浪费空间,同时也让工程臃肿 | 借助Maven,可将jar包仅仅保存在“仓库”中,有需要该文件时,就引用该文件接口,不需要复制文件过来占用空间 |
如果jar包都到各个官网网站下载,会浪费很多时间,而且可能不全 | 借助Maven可以以规范的方式下载jar包,因为所有的知名框架或第三方工具的jar包已经按照统一的规范存放到了Maven的中央仓库中 |
一个jar包依赖的其他jar包可能没导入到项目而导致项目跑不起来 | Maven会自动将你要加入到项目中的jar包导入,不仅导入,而且还会将该jar包所依赖的jar包都自动导入进来 |
相关概念
- 仓库:存放各种包的一个位置,具体可分为三种:
- 本地仓库:存放在计算机本地的仓库,Maven 所需要的任何构件都是直接从本地仓库获取的
- 远程仓库(私服):存放在其他服务器,当所需包再本地仓库不存在时Maven就会去私服查找并下载到本地仓库,一般一个私服的管理者是一个公司或一个开发团队。
- 中央仓库:Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。当所需包在本地仓库或私服不存在时,会去中央仓库下载。这个仓库由 Maven 社区管理。
- 坐标:包在本地仓库的位置,需要指明坐标,Maven才能找到依赖的包。
对于坐标具体包括以下几部分:- groupId:公司名称或者组织名称
- artifactId:项目名称
- version:当前项目的版本号
- type:依赖的类型,jar或者war(默认为jar,表示依赖的是一个jar包)
- classifier:表示在相同版本下针对不同的环境或者jdk使用的jar,可省略
- scope:包的作用范围,可省略
工作原理
Maven最著名的(也是几乎每个人最先接触到的)就是Maven的依赖管理, 它使得我们不必再到开源项目的官网一个个下载开源组件, 然后再一个个放入classpath.
通过在pom.xml中配置所依赖的包,Maven就会自动从本地仓库引入依赖的包,如果所需包在本地仓库不存在,Maven将去上私服下载并引入,如果私服仍不存在,将去中央仓库下载。
graph LR; M[Maven项目]--引用-->L[本地仓库] L-.访问.->S[私服] S-.访问.->Z[中央仓库] L-.访问.->Z
Maven的安装配置
安装Maven前的准备
Maven依赖JDK,首先要有JDK环境,且JDK版本不可太低。
Maven下载安装
下载地址:http://maven.apache.org/
下载后解压到所需目录即可。
配置环境变量
新建一个环境变量MAVEN_HOME
,值为Maven安装的根目录。
在Path环境变量中添加%MAVEN_HOME%\bin
验证是否配置成功
打开dos窗口 输入mvn –v
,出现了Maven版本说明成功。
配置本地仓库地址
setting.xml是Maven环境的配置文件,需要在里面配置好本地仓库的地址等。
例如:
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<!--需要改成自己的maven的本地仓库地址-->
<localRepository>E:\Maven\Repository</localRepository>
<!--阿里云镜像-->
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
入门程序演示
Maven目录结构
pom.xml配置文件
pom.xml是Maven项目的配置文件,里面配置依赖的包和项目信息及环境等。
Maven常用命令
在dos窗口进入到Maven项目下,可对当前Maven项目进行操作。
* compile:mvn compile
:编译了主目的文件
* clean:mvn clean
:清理编译的文件
* test:mvn test
:编译并运行test目录的代码
* package:mvn package
:打包
* install:mvn install
:把项目发布到本地仓库
Maven中有tomcat的运行环境,使用mvn tomcat:*
可以执行tomcat操作:
* tomcat:run:mvn tomcat:run
:启动tomcat
M2E插件的安装
现在在Eclipse中默认是安装了M2E插件的。
再Eclipse打开Windows->Preferences->Maven->Installations应该有一个自带的M2E插件,如果觉得版本太低,可以点击Add添加其他已经安装好的Maven环境。
然后在User Settings设置项里设定好Maven的settings.xml文件所在位置,Eclipse会自动读取settings.xml中配置的本地仓库地址,然后点击Apply and Close即可。
之后点击Window->Show View->Other->Maven Repositories可以看到本地仓库中所有的包,如果看不到包对着Local Repository点击右键重新Rebuild Index一下就可以了。
Maven项目构建
新建项目
New->Maven Project->勾选上Create a simple project(skip archetype selection)(跳过骨架)->Next->填写以下信息:
Group Id:公司或组织名
Artifact Id:项目或模块名
Version:版本
Packaging:打包方式(Jar或War...)
Name:项目名
Description:项目描述
Parent Project:父项目,可省略
填写完后->Finish
新建完后会出错,因为少了web.xml配置文件,需要手动在src/main/webapp/WEB-INF/下新建一个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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
可以在项目目录中看到:JRE System Library[JavaSE-1.5],编译版本为1.5。如果嫌弃版本太低可以在pom.xml中Project元素下添加以下代码来更改编译版本:
<build>
<!-- 配置了很多插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
添加并保存后对项目点击右键->Maven->Update Project...->OK更新以下项目就改变了编译版本。
添加Servlet
可以先试着在项目中添加一个servlet(HelloServlet),添加Servlet后servlet会报ClassNotFound错误,是因为所需包没有导入。因此需要在pom.xml中添加依赖。
添加坐标依赖
如果想导入包,可以直接在pom.xml中添加依赖元素,例如:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</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>
也可以在Dependencies视图中添加指定包。
打开pom.xml->点击Dependencies->Add来输入servlet加入包。注意scope属性应为provided,因为tomcat容器里是有servlet这个包的。设定了provided后,在打包时Maven不会把servlet包加入到项目,如果不设定scope为provided,会报包冲突的错误。
配置Servlet
加入之后需要在web.xml的web-app元素中加入以下元数据来配置servlet:
<servlet>
<description></description>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>cn.itcast.hello.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
运行
方式1:打开dos窗口,进入Maven项目目录,运行mvn tomcat:run
命令,之后访问servlet看能否访问。
方式2:使用Eclipse,右键->Maven->Maven build...->在Goals输入tomcat:run
。
Comments | NOTHING