“Maven笔记”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
 
(未显示同一用户的15个中间版本)
第3行: 第3行:


== 关于Maven ==
== 关于Maven ==
=== 介绍 ===
maven翻译为“专家”、“内行”,是Apache下的一个纯Java开发的开源项目, 它是一个'''项目管理工具''',可以使用maven对java进行'''项目构建、依赖管理'''。
=== 项目构建 ===
* 项目构建,是一个项目从编写源代码到编译、 测试、 运行、 打包、 部署、 运行的过程;
==== 传统项目构建过程: ====
[[File:传统项目构建.jpg|400px]]
# 在eclipse中创建一 个javaweb工程
# 在工程中编写源代码及配置文件等
# 对源代码进行编译,java文件编译成 class文件
# 执行Junit单元测试
# 将工程打成war包部署至tomcat运行
==== maven项目构建过程: ====
* maven将项目构建的过程进行标准化,每个阶段使用一个命令完成。
[[File:Maven项目构建.jpg|400px]]
上图中部分阶段对应命令如下:
# 清理阶段:“'''clean'''”,用于清理输出的class 文件;
# 编译阶段:“'''compile'''”, 用于将java代码编译成 class文件;
# 打包阶段:“'''package'''”,java工程可以打成jar包,web包可以打成war包;
* 运行maven工程(web工程)需要命令:“'''tomat:run'''”
优点:
# 一个命令完成构建、运行,方便快捷。
# maven对每个构建阶段进行规范,非常有利千大型团队协作开发。
=== 依赖管理 ===
是依赖管理:就是对项目所有依赖的 jar 包进行规范化管理。
==== 传统项目的依赖管理 ====
传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中。这个过程中容易出现很多问题:
# 没有对jar包的版本统一管理, 容易导致'''版本冲突'''。
# 从网上找jar包非常不方便, 有些jar找不到。
# jar包添加到工程中导致工程过大。
==== Maven项目的依赖管理 ====
maven项目管理所依赖的jar包不需要 手动向工程添加jar包,只需要在“'''pom.xml'''”(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图:
[[File:Maven项目的依赖管理.jpg|400px]]
优点:
# 通过pom.xml文件对jar包的版本进行统一管理, 可'''避免版本冲突'''。
# maven团队维护了一个非常全的maven仓库, 里边包括了当前使用的jar包, maven工程可以自动从maven仓库下载jar包, 非常方便。
=== 使用Maven的优点 ===
# 一步构建
#: maven对项目构建的过程进行标准化, 通过一个命令即可完成构建过程。
# 依赖管理
#: maven工程不用手动导jar包, 通过在 pom.xml 中定义坐标从maven仓库自动下载,方便且不易出错。
# maven的跨平台, 可在window、linux上使用。
# maven遴循规范开发有利于提高大型团队的开发效率, 降低项目的维护成本, 大公司都会考虑使用maven来构建项目。
== 入门 ==
=== 下载 ===
* 从[http://maven.apache.org/download.cgi]可下载maven最新版本。
=== 安装与配置 ===
解压:将maven解压到一个不含有中文和空格的目录中。
: [[File:Maven目录结构.jpg|800px]]
# “bin”:“mvn.bat”(以run方式运行项目)、“mvnDebug.bat”(以debug方式运行项目);
# “boot”:maven运行需要类加载器;
# “conf”:“'''settings.xml'''”整个maven工具核心配置文件;
# “lib”:maven运行依赖jar包;
环境变量:
* 添加“%MAVEN_HOME%/bin”到path;
*: [[File:Maven环境变量.png|800px]]
验证安装:
* 通过“'''mvn -v'''”命令检查maven是否安装成功:
*: [[File:Maven验证安装.jpg|800px]]
=== Maven 仓库 ===
maven的工作需要从仓库下载些jar包,本地项目都会通过maven软件从远程仓库下载jar包并存在本地仓库,本地仓库存在的jar包就不用每次从远程仓库下载了。
==== 仓库类型 ====
# '''本地仓库''': 用来存储从远程仓库或中央仓库下载的插件和jar 包,项目使用一些插件或jar包,优先从本地仓库查找。
#: 默认本地仓库位置在“${user.dir}/.m2/repository”中,(“${user.dir}”表示windows用户目录)。
# '''远程仓库''': 如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
#: 远程仓库可以在互联网内也可以在局域网内。
# '''中央仓库''': 在maven软件中内置一个远程仓库地址“ http://repol.maven.org/maven2 ”,它是中央仓库,由Maven团队维护,服务于整个互联网,里面存储了非常全的jar包,包含了世界上大部分流行的开源项目构件。
==== 配置本地仓库 ====
在“%MAVEN_HOME%/conf/settings.xml”文件中配置本地仓库位置:
<syntaxhighlight lang="xml">
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
      | The path to the local repository maven will use to store artifacts.
      |
      | Default: ${user.home}/.m2/repository
    <localRepository>/path/to/local/repo</localRepository>
  -->
  <localRepository>D:\Repository</localRepository>
 
  ...
</settings>
</syntaxhighlight>
== 入门程序 ==
=== 项目工程目录约定 ===
[[File:Maven项目工程目录约定.jpg|800px]]
=== 常用命令 ===
==== compile ====
compile 是maven工程的编译命令,作用是将“src/main/java”下的文件编译为class文件输出到“target”目录下。
# 执行<nowiki>mvn compile</nowiki>:
#: [[File:执行mvn compile.jpg|800px]]
# 查看target目录, class文件已生成, 编译完成:
#: [[File:执行mvn compile完成.jpg|800px]]
==== test ====
test 是maven工程的测试命令, 会执行src/test/java下的单元测试类。
cmd执行mvn test执行src/test/java下单元测试类:
:[[File:执行mvn test.jpg|800px]]
==== clean ====
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”:生成项目报告,站点,发布站点;
==== 生命周期的阶段 ====
每个生命周期都有很多阶段, 每个阶段对应一个执行命令:
# clean生命周期的阶段
#: pre-clean:执行一些需要在clean之前完成的工作
#: clean:移除所有上一次构建生成的文件
#: post-clean:执行一些需要在clean之后立刻完成的工作
# default周期的内容:
#: validate
#: generate-sources
#: process-sources
#: generate-resources
#: process-resources:复制并处理资源文件,至目标目录,准备打包。
#: '''compile''':编译项目的源代码。
#: process-classes
#: generate-test-sources
#: process-test-sources
#: generate-test-resources
#: process-test-resources:复制并处理资源文件, 至目标 测试目录。
#: test-compile:编译、测试源代码。
#: process-test-classes
#: '''test''':使用合适的单元测试框架运行测试。 这些测试 代码不会被打包或部署。
#: prepare-package
#: '''package''':接受编译好的代码, 打包成可发布的格式, 如JAR。
#: pre-integration-test
#: integration-test
#: post-integration-test
#: verify
#: '''install''':将包安装至本地仓库, 以让其它项目依赖。
#: '''deploy''':将最终的包复制到远程的仓库, 以让其它开发人员与项目共享。
# site:生命周期的阶段
#: pre-site:执行些需要在生成站点文档之前完成的工作
#: site:生成项目的站点文档
#: post-site:执行些需要在生成站点文档之后完成的工作,并且为部署做准备
#: site-deploy:将生成的站点文档部署到特定的服务器上
==== 命令与生命周期的阶段 ====
执行命令会将该命令 在的在生命周期当中之前的阶段自动执行,比如:执行“mvn clean”命令会自动执行pre-clean和clean两个阶段, “mvn test”命令会自动执行validate、compile、test等阶段。
* 执行某个生命周期的某个阶段不会影响其它的生命周期!
* 如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如:“mvn clean package”该命令执行clean生命周期的 clean阶段 和default生命周期的 package阶段。
=== Maven 概念模型 ===
Maven包含了:一个项目对象模型(Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(Dependency Management System), 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
下图是maven的概念模型图:
[[File:maven的概念模型图.jpg|800px]]
==== 项目对象模型(Project Object Model) ====
一个maven工程都有一个'''pom.xml'''文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。
==== 依赖管理系统(Dependency Management System)====
通过maven的依赖管理对项目所依赖的jar 包进行统一管理。
比如:项目依赖 Junit4.9, 通过在 pom.xml 中定义 Junit4.9 的依赖:
<syntaxhighlight lang="xml">
<!--依赖关系-->
<dependencies>
<!--此项目运行使用junit, 所以此项目依赖junit-->
<dependency>
<!-- junit的项目名称-->
<groupld>junit</groupld>
<!-- junit的模块名称-->
<artifactld>junit</artifactld>
<!-- junit版本-->
<version>4.9</version>
<!--依赖范围:单元测试时使用junit -->
<scope>test</scope>
</dependency>
...
<dependencies>
</syntaxhighlight>
==== 一个项目生命周期(Project Lifecycle) ====
使用maven完成项目的构建, 项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段:
[[File:Maven项目生命周期.jpg|800px]]
* maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行mvn compile编译、 执行mvn clean清理。
==== 一组标准集合 ====
maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
==== 插件(plugin)、目标(goal) ====
maven 管理项目生命周期过程都是基于插件完成的。
== 项目构建 ==
=== M2e 插件安装配置 ===
在eclipse 集成maven软件, 最终通过eclipse创建maven工程
==== 插件安装 ====
* 一些高版本的eclipse 已经内置了maven 的安装
在eclipse插件市场之间搜索安装即可。
==== Eclipes 设置 M2e ====
===== 指定maven安装目录 =====
[[File:Eclipse设置M2e.jpg|800px]]
===== User Setting 配置 =====
[[File:Eclipse设置M2e的User Setting 配置.jpg|800px]]
* 如果修改了setting.xml文件需要点击上图中的"up date settings"按钮
* 对本地仓库重建索引,点击"Reindex"。
===== eclipse浏览仓库 =====
测试在eclipse中是否可以浏览maven的本地仓库(“Window”->“Show View”->“Other...”),如果可以正常浏览maven本地仓库则说明eclipse集成maven已经完成。
* 不能显示则尝试“Reindex”;
[[File:eclipse浏览Maven仓库.jpg|800px]]
=== 坐标定义 ===
每个maven工程都需要定义本工程的坐标(项目的“pom.xml”文件), 坐标是maven对jar 包的身份定义。如:
<syntaxhighlight lang="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">
<!-- 项目名称,定义为组织名+项目名,类似包名-->
<groupld>n.itcast.maven</groupld>
<!-- junit的模块名称-->
<artifactld>maven-first</artifactld>
<!-- 当前项目版本号, snapshot 为快照版本即非正式版本, release 为正式发布版本-->
<version>0.0.1-SNAPSHOT</version>
<!--依赖范围:test 为单元测试时使用 -->
<!--打包类型
jar: 执行package 会打成jar 包
war: 执行package 会打成war 包
porn : 用于maven 工程的继承,
通常父工程设置为porn
-->
<packaging>war</packaging>
...
<dependencies>
</syntaxhighlight>
=== 构建 Web 项目 ===
【略】
=== Eclipse下的命令 ===
在eclipse下测试命令 clean、compile、test、package、install:
[[File:Eclipse使用Maven的命令.jpg|400px]]
* “Run as”采用“mvn”命令运行,“Debug as”采用“mvnDebug”命令调试方式运行(可打断点)
== 依赖管理 ==
=== 添加依赖(dependency) ===
在项目的“pom.xml”中添加“dependency”标签,如:
<syntaxhighlight lang="xml">
<dependencies>
<!-- 添加junit4.9依赖 -->
<dependency>
<groupld>junit</groupld>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>provided</scope>
</dependency>
</dependencies>
</syntaxhighlight>
=== 查找坐标 ===
添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询:
# 相关网站或仓库中查询:
#: [http://search.maven.org/ http://search.maven.org/]
#: [http://mvnrepository.com/ http://mvnrepository.com/]
# 使用maven插件的索引功能:
#: [[File:Eclipse中maven插件的索引功能.jpg|800px]]
=== 依赖范围 ===
A依赖B, 需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:
# '''compile''':(默认依赖范围)编译范围的依赖会用在'''编译、测试、运行''',由于运行时需要所以编译范围的依赖'''会被打包'''。
#:
# '''provided''':provided依赖在'''编译和测试'''时需要,在运行时不需要(provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用);
#: 比如:servlet api被tomcat容器提供。
# '''runtime''':runtime依赖在'''运行和测试'''系统的时候需要,但在编译的时候不需要。
#: 比如:jdbc的驱动包
# '''test''':在编译和运行时都不需要,它们只有在'''测试编译和测试运行'''阶段可用;
#: 比如:junit
# '''system''':(不推荐使用)system范围依赖与provided类似,但是必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径。
* 依赖范围由强到弱的顺序是: compile > provided > runtime > test
[[File:Maven 依赖范围.png|800px]]
=== Tomcat 插件 ===

2022年5月7日 (六) 16:54的最新版本


关于Maven

介绍

maven翻译为“专家”、“内行”,是Apache下的一个纯Java开发的开源项目, 它是一个项目管理工具,可以使用maven对java进行项目构建、依赖管理

项目构建

  • 项目构建,是一个项目从编写源代码到编译、 测试、 运行、 打包、 部署、 运行的过程;

传统项目构建过程:

传统项目构建.jpg

  1. 在eclipse中创建一 个javaweb工程
  2. 在工程中编写源代码及配置文件等
  3. 对源代码进行编译,java文件编译成 class文件
  4. 执行Junit单元测试
  5. 将工程打成war包部署至tomcat运行


maven项目构建过程:

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

Maven项目构建.jpg 上图中部分阶段对应命令如下:

  1. 清理阶段:“clean”,用于清理输出的class 文件;
  2. 编译阶段:“compile”, 用于将java代码编译成 class文件;
  3. 打包阶段:“package”,java工程可以打成jar包,web包可以打成war包;
  • 运行maven工程(web工程)需要命令:“tomat:run


优点:

  1. 一个命令完成构建、运行,方便快捷。
  2. maven对每个构建阶段进行规范,非常有利千大型团队协作开发。

依赖管理

是依赖管理:就是对项目所有依赖的 jar 包进行规范化管理。

传统项目的依赖管理

传统的项目工程要管理所依赖的jar包完全靠人工进行,程序员从网上下载jar包添加到项目工程中。这个过程中容易出现很多问题:

  1. 没有对jar包的版本统一管理, 容易导致版本冲突
  2. 从网上找jar包非常不方便, 有些jar找不到。
  3. jar包添加到工程中导致工程过大。

Maven项目的依赖管理

maven项目管理所依赖的jar包不需要 手动向工程添加jar包,只需要在“pom.xml”(maven工程的配置文件)添加jar包的坐标,自动从maven仓库中下载jar包、运行,如下图: Maven项目的依赖管理.jpg


优点:

  1. 通过pom.xml文件对jar包的版本进行统一管理, 可避免版本冲突
  2. maven团队维护了一个非常全的maven仓库, 里边包括了当前使用的jar包, maven工程可以自动从maven仓库下载jar包, 非常方便。

使用Maven的优点

  1. 一步构建
    maven对项目构建的过程进行标准化, 通过一个命令即可完成构建过程。
  2. 依赖管理
    maven工程不用手动导jar包, 通过在 pom.xml 中定义坐标从maven仓库自动下载,方便且不易出错。
  3. maven的跨平台, 可在window、linux上使用。
  4. maven遴循规范开发有利于提高大型团队的开发效率, 降低项目的维护成本, 大公司都会考虑使用maven来构建项目。

入门

下载

  • [1]可下载maven最新版本。

安装与配置

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

Maven目录结构.jpg
  1. “bin”:“mvn.bat”(以run方式运行项目)、“mvnDebug.bat”(以debug方式运行项目);
  2. “boot”:maven运行需要类加载器;
  3. “conf”:“settings.xml”整个maven工具核心配置文件;
  4. “lib”:maven运行依赖jar包;


环境变量:

  • 添加“%MAVEN_HOME%/bin”到path;
    Maven环境变量.png


验证安装:

  • 通过“mvn -v”命令检查maven是否安装成功:
    Maven验证安装.jpg

Maven 仓库

maven的工作需要从仓库下载些jar包,本地项目都会通过maven软件从远程仓库下载jar包并存在本地仓库,本地仓库存在的jar包就不用每次从远程仓库下载了。

仓库类型

  1. 本地仓库: 用来存储从远程仓库或中央仓库下载的插件和jar 包,项目使用一些插件或jar包,优先从本地仓库查找。
    默认本地仓库位置在“${user.dir}/.m2/repository”中,(“${user.dir}”表示windows用户目录)。
  2. 远程仓库: 如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。
    远程仓库可以在互联网内也可以在局域网内。
  3. 中央仓库: 在maven软件中内置一个远程仓库地址“ http://repol.maven.org/maven2 ”,它是中央仓库,由Maven团队维护,服务于整个互联网,里面存储了非常全的jar包,包含了世界上大部分流行的开源项目构件。

配置本地仓库

在“%MAVEN_HOME%/conf/settings.xml”文件中配置本地仓库位置:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <!-- localRepository
      | The path to the local repository maven will use to store artifacts.
      |
      | Default: ${user.home}/.m2/repository
     <localRepository>/path/to/local/repo</localRepository>
   -->
   <localRepository>D:\Repository</localRepository>
   
   ...
</settings>

入门程序

项目工程目录约定

Maven项目工程目录约定.jpg

常用命令

compile

compile 是maven工程的编译命令,作用是将“src/main/java”下的文件编译为class文件输出到“target”目录下。

  1. 执行mvn compile:
    执行mvn compile.jpg
  2. 查看target目录, class文件已生成, 编译完成:
    执行mvn compile完成.jpg

test

test 是maven工程的测试命令, 会执行src/test/java下的单元测试类。


cmd执行mvn test执行src/test/java下单元测试类:

执行mvn test.jpg

clean

clean 是maven工程的清理命令, 执行clean会删除target目录的内容。

package

package是maven工程的打包命令, 对于java工程执行package打成jar包, 对于web工程打成war包。

install

install 是maven工程的安装命令,执行 install将maven打成jar包或war包发布到本地仓库

生命周期

maven对项目构建过程分为三套相互独立的生命周期,(“三套",而“相互独立”):

  1. “Clean Lifecycle”:在进行真正的构建之前进行一些清理工作。
  2. “Default Lifecycle”:构建的核心部分,编译,测试,打包,部署等等。
  3. “Site Lifecycle”:生成项目报告,站点,发布站点;

生命周期的阶段

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

  1. clean生命周期的阶段
    pre-clean:执行一些需要在clean之前完成的工作
    clean:移除所有上一次构建生成的文件
    post-clean:执行一些需要在clean之后立刻完成的工作
  2. default周期的内容:
    validate
    generate-sources
    process-sources
    generate-resources
    process-resources:复制并处理资源文件,至目标目录,准备打包。
    compile:编译项目的源代码。
    process-classes
    generate-test-sources
    process-test-sources
    generate-test-resources
    process-test-resources:复制并处理资源文件, 至目标 测试目录。
    test-compile:编译、测试源代码。
    process-test-classes
    test:使用合适的单元测试框架运行测试。 这些测试 代码不会被打包或部署。
    prepare-package
    package:接受编译好的代码, 打包成可发布的格式, 如JAR。
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install:将包安装至本地仓库, 以让其它项目依赖。
    deploy:将最终的包复制到远程的仓库, 以让其它开发人员与项目共享。
  3. site:生命周期的阶段
    pre-site:执行些需要在生成站点文档之前完成的工作
    site:生成项目的站点文档
    post-site:执行些需要在生成站点文档之后完成的工作,并且为部署做准备
    site-deploy:将生成的站点文档部署到特定的服务器上

命令与生命周期的阶段

执行命令会将该命令 在的在生命周期当中之前的阶段自动执行,比如:执行“mvn clean”命令会自动执行pre-clean和clean两个阶段, “mvn test”命令会自动执行validate、compile、test等阶段。


  • 执行某个生命周期的某个阶段不会影响其它的生命周期!
  • 如果要同时执行多个生命周期的阶段可在命令行输入多个命令,中间以空格隔开,例如:“mvn clean package”该命令执行clean生命周期的 clean阶段 和default生命周期的 package阶段。

Maven 概念模型

Maven包含了:一个项目对象模型(Project Object Model), 一组标准集合, 一个项目生命周期(Project Lifecycle), 一个依赖管理系统(Dependency Management System), 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。


下图是maven的概念模型图: Maven的概念模型图.jpg

项目对象模型(Project Object Model)

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

依赖管理系统(Dependency Management System)

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


比如:项目依赖 Junit4.9, 通过在 pom.xml 中定义 Junit4.9 的依赖:

<!--依赖关系-->
<dependencies>
	<!--此项目运行使用junit, 所以此项目依赖junit-->
	<dependency>
		<!-- junit的项目名称-->
		<groupld>junit</groupld>
		<!-- junit的模块名称-->
		<artifactld>junit</artifactld>
		<!-- junit版本-->
		<version>4.9</version>
		<!--依赖范围:单元测试时使用junit -->
		<scope>test</scope>
	</dependency>
	...
<dependencies>

一个项目生命周期(Project Lifecycle)

使用maven完成项目的构建, 项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期,如下所示是生命周期的各各阶段: Maven项目生命周期.jpg

  • maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行mvn compile编译、 执行mvn clean清理。

一组标准集合

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

插件(plugin)、目标(goal)

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

项目构建

M2e 插件安装配置

在eclipse 集成maven软件, 最终通过eclipse创建maven工程

插件安装

  • 一些高版本的eclipse 已经内置了maven 的安装

在eclipse插件市场之间搜索安装即可。

Eclipes 设置 M2e

指定maven安装目录

Eclipse设置M2e.jpg

User Setting 配置

Eclipse设置M2e的User Setting 配置.jpg

  • 如果修改了setting.xml文件需要点击上图中的"up date settings"按钮
  • 对本地仓库重建索引,点击"Reindex"。
eclipse浏览仓库

测试在eclipse中是否可以浏览maven的本地仓库(“Window”->“Show View”->“Other...”),如果可以正常浏览maven本地仓库则说明eclipse集成maven已经完成。

  • 不能显示则尝试“Reindex”;

Eclipse浏览Maven仓库.jpg

坐标定义

每个maven工程都需要定义本工程的坐标(项目的“pom.xml”文件), 坐标是maven对jar 包的身份定义。如:

<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">
	<!-- 项目名称,定义为组织名+项目名,类似包名-->
	<groupld>n.itcast.maven</groupld>
	<!-- junit的模块名称-->
	<artifactld>maven-first</artifactld>
	<!-- 当前项目版本号, snapshot 为快照版本即非正式版本, release 为正式发布版本-->
	<version>0.0.1-SNAPSHOT</version>
	<!--依赖范围:test 为单元测试时使用 -->

	<!--打包类型
		jar: 执行package 会打成jar 包
		war: 执行package 会打成war 包
		porn : 用于maven 工程的继承, 
		通常父工程设置为porn
	-->
	<packaging>war</packaging>

	...
<dependencies>

构建 Web 项目

【略】

Eclipse下的命令

在eclipse下测试命令 clean、compile、test、package、install:

Eclipse使用Maven的命令.jpg

  • “Run as”采用“mvn”命令运行,“Debug as”采用“mvnDebug”命令调试方式运行(可打断点)

依赖管理

添加依赖(dependency)

在项目的“pom.xml”中添加“dependency”标签,如:

	<dependencies>
		<!-- 添加junit4.9依赖 -->
		<dependency>
			<groupld>junit</groupld>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

查找坐标

添加依赖需要指定依赖jar包的坐标,但是很多情况我们是不知道jar包的的坐标,可以通过如下方式查询:

  1. 相关网站或仓库中查询:
    http://search.maven.org/
    http://mvnrepository.com/
  2. 使用maven插件的索引功能:
    Eclipse中maven插件的索引功能.jpg

依赖范围

A依赖B, 需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

  1. compile:(默认依赖范围)编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包
  2. provided:provided依赖在编译和测试时需要,在运行时不需要(provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用);
    比如:servlet api被tomcat容器提供。
  3. runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。
    比如:jdbc的驱动包
  4. test:在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用;
    比如:junit
  5. system:(不推荐使用)system范围依赖与provided类似,但是必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径。
  • 依赖范围由强到弱的顺序是: compile > provided > runtime > test

Maven 依赖范围.png

Tomcat 插件