一.Maven 介绍
1.maven 是什么?
maven翻译为“专家、内行”,Maven是Apache下的一个纯java开发的开源项目,是一个项目管理工具,使用maven对java项目进行构建、依赖管理。当前使用maven的的项目在持续增长。
2.什么是项目构建?
项目构建是一个项目从编写源代码到编译、测试、运行、打包、部署、运行的过程。
2.1 传统项目构建
图片
2.2 maven项目构建过程
图片
3.maven工程构建的有点
1.一个命令完成构建、运行,方便快捷
2.maven对每个构建阶段进行规范,非常有利于大型团队协作开发
4.什么是依赖管理
什么是依赖?一个java项目可能要使用一些第三方jar包才可以运行,那么我们说这个java项目依赖了这些第三方的jar包
依赖管理就是对项目所有以来的jar包进行规范化管理。
4.1传统项目的依赖管理
图片
4.2 maven项目的依赖管理
maven项目管理所依赖的jar包,不需要手动向工程添加jar包,只要在pom.xml(maven工程配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:
图片
使用maven依赖管理添加jar的好处:
1.通过pom.xml文件对jar包的版本进行统一的管理,可避免版本冲突。
2.maven团队维护了一个非常全的maven仓库,里边包括了当前使用的jar包,maven工程可以自动从maven仓库中下载jar包,非常方便。
5.使用maven的好处
图片
二. Maven安装
1,下载安装
从该网站http://maven.apache.org/download/cgi下载maven3.3.9版本
2.解压到一个不含中文和空格的目录中
bin目录:
boot目录:
conf目录:
lib目录:
3.环境变量配置:
电脑上需安装java环境,安装jdk1.7+版本(path中配置有JAVA_HOME/bin)
配置MAVEN_HOME
变量名:MAVEN_HOME
变量值:maven解压目录
将%MAVEN_HOME%/bin 加到环境变量path
进入命令行窗口,mvn -v查看是否成功
4.maven仓库的作用
5.配置本地仓库
在MAVEN_HOME/conf/settings.xml文件中配置本地仓库位置
举例:
<localRepository>D:/repository</localRepository>
也可以修改本地仓库的位置
图片
6.maven项目工程目录约定
图片
进入到某个项目的POM文件所在目录下。
7.常用的maven命令
mvn clean
mvn compile
mvn package
mvn install
编写以上命令时最好将myEclipse关闭,特别是clean命令。
项目构建
1.eclipse与maven
命令行方式使用maven效率不高,可以在开发工具中集成maven软件,如eclipse2014已集成maven
2.eclpse中maven插件
2014版本不用单独安装,可以创建maven项目 表示maven插件已经存在
3.指定maven安装目录
有些开发工具版本集成了maven,可以不适用eclipse内置版本,使用maven3.3.9
注意:如果修改了setting.xml文件,需要点击上图中的update settings 按钮
对本地仓库进行重建索引,点击redix
4.eclipse浏览仓库
maven配置完成需要测试在eclipse中是否可以浏览maven的本地仓库,如果可以正常浏览maven本地仓库则说明eclipse集成maven已经完成
打开eclipse仓库视图,对插件和jar包创立索引
5.定义maven坐标
每个maven工程都需要定义本工程的坐标,坐标是maven对jar包的身份定义,
举例:某maven工程的坐标定义为:
<!--项目名称:组织名+项目名 类似包名-->
<groupId>com.bigdata</groupId>
<!--模块名称-->
<artifactId>hello</artifactId>
<!--当前版本号 SNAPSHOT 为快照,即非正式版本,Release 为正式版本-->
<version>0.0.1-SNAPSHOT</version>
<!--打包方式 三种 一般java项目打包为jar,web项目打包为war,pom方式用于maven工程的继承,通常父工程设置为pom -->
<packaging>war</packaging>
6.创建maven工程
6.1 新建maven工程
6.2定义坐标
6.3设置编译版本
maven工程默认编译版本是1.5 可以设置插件来配置编译版本,如设置为1.7
在pom.xml中加入:
<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>
6.4 定义web.xml
在src/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>
6.5 编写servlet
/**
* Servlet implementation class HelloServlet
*/
public class HelloServlet extends HttpServlet {
public HelloServlet() {
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
6.6 编写jsp
6.7 添加servlet/jsp的jar包
<!-- 添加servlet-api,jsp-api -->
<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>
6.7 配置servlet
6.9运行
cmd命令进入工程目录,运行tomcat:run命令,如果是tomat7,则为tomcat7:run 命令
依赖管理
maven依赖关系中Scope的作用
Dependency Scope
在POM 4中,中还引入了,它主要管理依赖的部署。目前可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。