Maven_day01

Maven_day01

1. maven介绍

1.1 什么是maven

maven译为“专家”,“内行”,是apache下的一个纯java开发的开源项目,是一个项目管理工具,可以对java项目进行构建,依赖管理。

1.2 传统项目构建

构建过程:

创建一个工程,在工程中编写源代码及配置文件,对源代码进行编译,将java文件编译成class文件,执行junit单元测试,最后将工程打包成war包部署到tomcat运行。

1.3 maven项目构建

maven将项目的构建过程标准化,每个阶段使用一个命令完成。

  • maven工程构建的优点
    1. 一个命令完成构建,运行,方便快捷
    2. maven对每个构建阶段进行规范,有利于大型团队协作开发

1.4 传统项目依赖管理

传统项目工程管理所依赖的jar包完全靠人工进行,手工导入jar包。

  • 缺点

    1. v从网上找jar包不方便,有些jar包找不到

    2. jar包加入到工程中导致工程过大

    3. 没有对jar包版本的统一管理,容易导致版本冲突

1.5 maven项目依赖管理

maven项目中所依赖的jar包不需要手工添加,只需要在maven工程的配置文件pom.xml中添加jar包的坐标,就能自动从maven仓库中下载添加所需jar包。

  • 优点
    1. 对jar包版本统一管理,避免版本冲突
    2. maven中的jar包非常全,使用起来很方便

1.6 使用maven的好处

2. maven安装及配置

  • 下载

    http://maven.apache.org/download.cgi

  • 解压

    将maven解压到一个不含中文及空格的目录中。

  • maven环境变量配置

    1. 配置jdk,maven3.3.9需要的jdk版本为1.7以上

    2. 配置MAVEN_HOME

    3. 将%MAVEN_HOME%/bin加入到path中

​4. 测试maven是否安装成功

cmd窗口运行mvn -v,看到maven版本为3.3.9及jdk版本为1.7以上,即安装成功:

3. maven仓库

3.1 三种仓库

  1. 本地仓库

用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用的插件或jar包优先从本地仓库查找。默认本地仓库在${user.dir}/.m2/repository,${user.dir}表示windows用户目录,例如:C:\Users\WZL1998.m2\repository。

  1. 远程仓库

远程仓库可以在互联网内,也可以在局域网内。当本地仓库找不到时,就去远程仓库下载。

  1. 中央仓库

maven团队维护的,存储了非常全的jar包。https://repo1.maven.org/maven2

3.2 配置本地仓库

我的本地仓库在D:\JavaEE\16.Maven\repository,在D:\JavaEE\16.Maven\apache-maven-3.3.9\conf\settings.xml配置本地仓库位置。

<localRepository>D:\JavaEE\16.Maven\repository</localRepository>

4. maven项目工程目录

  • src/main/java: 存放项目的.java文件
  • src/main/resources: 存放项目资源文件,如spring,mybatis配置文件
  • src/test/java: 存放所有的单元测试.java文件,如junit测试类
  • src/test/resources: 测试资源文件
  • target: 项目输出位置,编译后的class文件会输出到此目录
  • pom.xml: maven项目核心配置文件

5. 常用maven命令

在dos窗口中运行时,前面要加上mvn;在eclipse中不需要加

  • compile

    编译命令,将src/main/java下的文件编译为class文件输出到target目录下。这个命令只会对java源程序编译,不会编译测试代码,编译测试类:mvn test-compile。

  • test

    测试命令,会运行src/test/java下的单元测试类。

  • clean

    清理命令,删除target目录的内容。

  • package

    打包命令,将java工程打包成jar包,web工程打包成war包。

  • install

    安装命令,将maven工程打成war包发布到本地仓库。位置:仓库/${groupId}/{artifactId}/version目录。

6. 生命周期(了解)

6.1 三套生命周期

maven对项目构建过程分为三套相互独立的生命周期。

  • clean lifecycle

    在进行真正的构建之前进行一些清理工作。

  • default lifecycle

    构建的核心部分,编译,测试,打包,部署等。

  • site lifecycle

    生成项目报告,站点,发布站点。

6.2 生命周期的阶段

每个生命周期有很多阶段,每个阶段对应一个执行命令。

  • clean lifecycle

    pre-clean: 执行一些需要在clean之前完成的工作

    clean: 移除所有上一次构建生成的文件

    post-clean: 执行一些需要在clean之后立刻完成的工作

  • default lifecycle

  • site lifecycle

    pre-site: 执行一些需要在生成站点文档之前完成的工作

    site: 生成项目的站点文档

    post-site: 执行一些需要在生成站点文档之后完成的工作,并为部署做准备

    site-deploy: 将生成的站点文档部署到特定的服务器上

在maven中,只要在同一个生命周期,执行后面的阶段,前面的阶段也会被执行,而不需要额外去输入前面的阶段。执行某个生命周期的某个阶段不会影响其它的生命周期。

如果要同时执行多个生命周期的阶段,可在命令行输入多个命令,中间以空格隔开。如:clean package,该命令执行clean生命周期的clean阶段和default生命周期的package阶段。

7. maven概念模型

maven包含一个项目对象模型(project object model),一组标准集合,一个项目生命周期(project lifecycle),一个依赖管理系统(dependency management system),和用来运行定义在生命周期阶段中插件(plugin)目标(goal)的逻辑。

maven概念模型图:

  • 项目对象模型

    一个maven工程都有一个pom.xml文件,在该文件中定义项目的坐标,项目依赖,项目信息,插件目标等。

  • 标准集合

    maven将整个项目管理过程定义一组标准。如:通过maven构建工程由标准的目录结构,有标准的生命周期阶段,依赖管理有标准的坐标定义等。

  • 项目生命周期

  • 依赖管理系统

    对项目所依赖的jar包进行统一管理。

    <!--添加依赖包-->
      <dependencies>
    	<!--此项目用到servlet,所以需要servlet-api-->      
      	<dependency>
            <!--groupId和artifactId统称为坐标,保证项目的唯一性-->
             <!--组织名-->
      		<groupId>javax.servlet</groupId>
             <!--模块名,项目名-->
      		<artifactId>servlet-api</artifactId>
             <!--版本号-->
      		<version>2.5</version>
             <!--依赖的作用范围-->
      		<scope>provided</scope>
      	</dependency>
      </dependencies>
    
  • 插件目标

    maven管理项目生命周期过程都是基于插件完成的。

8. 入门项目构建

8.1 eclipse安装m2e插件

新建项目时如果能找到maven项目即表示maven插件已存在,但项目为了统一maven版本不会使用内置的maven版本,这里使用maven3.3.9。

指定maven安装目录:

8.2 User setting配置

配置使用的maven的settings.xml文件,使用maven安装目录下的settings.xml文件:

修改了settings.xml文件要点击update settings按钮对本地仓库重建索引,点击reindex。

8.3 eclipse浏览本地仓库

测试eclipse是否可以浏览maven的本地仓库,找到local respository本地仓库项,如果无法查看本地仓库,则右键点rebuild index重建索引即可。

8.4 定义maven坐标

每个maven工程都要定义本工程的坐标,坐标是maven对jar包的身份定义。如:

<!--组织名,类似包名-->
<groupId>com.itheima.maven</groupId>
<!--模块名,项目名-->
<artifactId>16.1maven</artifactId>
<!--版本号;snapshot为快照版本,即非正式版本,release为正式发布版本-->
<version>0.0.1-SNAPSHOT</version>
<!--打包类型;jar:打包成jar包;war:打包成war包;pom:用于maven工程的继承,通常父工程设置为pom-->
<packaging>war</packaging>

8.5 构建web工程

8.5.1 创建maven工程

  1. 右键new maven project

  2. 勾选create a simple project(skip archetype selection)

    即跳过骨架,如果不跳过,则创建的maven工程目录不完整。

    如果不勾选:

  3. 定义坐标

工程目录示意:

这里报错是因为缺少web工程目录,解决方法:右键项目-->javaEE tools-->generate deployment descriptor stub。生成后:

8.5.2 设置编译jdk版本

  • 方法一:

在pom.xml中加入:

 <!--修改全局jdk版本后,则此段代码可不加-->
  <build>
  	<plugins>
  		<plugin>
  		<!--添加编译器:右键项目==maven==add plugin==搜索compile-->
  			<groupId>org.apache.maven.plugins</groupId>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.5.1</version>
  			
  		<!--将默认jdk版本1.5改为1.7-->
  		<configuration>
  			<!--源码版本-->
  			<source>1.7</source>
  			<!--编译目标版本-->
  			<target>1.7</target>
  			<!--指定编码-->
  			<encoding>utf-8</encoding>
  		</configuration>
  		</plugin>
  	</plugins>

修改配置文件后,刷新工程,右键-->maven-->update projects,看到JRE System Library中变为JavaSE-1.7

  • 方法二:

    修改全局jdk版本:

    在D:\JavaEE\16.Maven\apache-maven-3.3.9\conf\settings.xml中修改profiles里的jdk版本为1.7,以后的项目则默认使用1.7来编译。

    <profile>
        <id>jdk1.7</id>
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.7</jdk>
        </activation>
        <properties>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
            <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
        </properties>
    </profile>
    

8.6 运行maven工程

  • 方式一:

    添加tomcat插件,使用插件运行,在pom.xml中:

    <!--添加tomcat7插件,以插件方式运行项目-->
      		<plugin>
      			<groupId>org.apache.tomcat.maven</groupId>
      			<artifactId>tomcat7-maven-plugin</artifactId>
      			<version>2.2</version>
      			<configuration>
      				<!--访问端口-->
      				<port>8080</port>
      				<!--项目路径-->
      				<path>/16.1maven</path>
      				<!--设置编码-->
      				<uriEncoding>utf-8</uriEncoding>
      			</configuration>
      		</plugin>
    

    运行步骤:

  • 方式二:

直接当作普通的web项目运行即可。右键run as-->run on server。

9. 依赖管理

9.1 添加依赖

添加依赖需要指定依赖jar包的坐标,可通过以下方式查询依赖的坐标:

  • 方式一:互联网搜索

    以spring core为例:

    访问https://mvnrepository.com,搜索spring core,选择版本,复制依赖即可。

    或直接百度搜索mvn repository spring

  • 方式二:使用maven插件的索引功能

    此种方式是从本地仓库中查找。

9.2 依赖作用范围

<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>jsp-api</artifactId>
  		<version>2.0</version>
    	<!--l依赖作用范围-->
  		<scope>provided</scope>
  	</dependency>
  • compile

    编译范围,默认依赖范围,可不写。编译范围的依赖会用在编译,测试,运行,由于运行时需要所以编译范围的依赖会被打包。

  • provided

    编译和测试时需要,运行时不需要,防止jar包冲突。如servlet-api运行时tomcat也会提供。

  • runtime

    运行和测试时需要。

  • test

    测试编译和测试运行时需要。

  • system

    与provided类似,但必须提供一个本地系统磁盘中的jar文件的路径,不推荐使用。

10. pom.xml基本配置

pom.xml是maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:

<!--project:文件根节点-->
<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:pom.xml使用的对象模型版本-->
  <modelVersion>4.0.0</modelVersion>
  <!--groupId:项目名称,一般写项目的域名-->
  <groupId>com.itheima.maven</groupId>
  <!--artifactId:模块名称,子项目名称-->
  <artifactId>16.1maven</artifactId>
  <!--version:产品版本号-->
  <version>0.0.1-SNAPSHOT</version>
  <!--packaging:打包类型-->
  <packaging>war</packaging>
  <!--name:项目显示名,长用于maven生成的文档-->
  <name>maven入门</name>
  <!--description:项目描述,长用于maven生成的文档-->
  <description>maven入门案例</description>
  <!--dependencies:添加依赖包,配置依赖的坐标-->
  <dependencies>...</dependencies>
  <!--build:项目构建配置,配置编译,运行插件等-->
  <build></build>
</project>
posted @ 2020-03-27 21:28  ALiWang1123  阅读(141)  评论(0编辑  收藏  举报