您的当前位置:首页正文

Maven学习初级入门

来源:华拓网

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

您曾经是否会遇到这些问题:
1.我们要开发一个 Java 项目,为了保证编译通过,我们会到处去寻找 jar 包。当编译通过了,在运行的时候,却发现 ClassNotFoundException,卧槽!还差 jar 包啊?再去找找吧。
2.每个 Java 项目的目录结构都没有一个统一的标准,配置文件到处都是,单元测试代码到底应该放在哪里,没有一个权威的规范。
3.可使用 Ant 做为项目构建工具,它可以自动化地完成编译、测试、打包等任务,确实为我们省了不少事儿,但编写 Ant 的 XML 脚本绝非是一件轻松的事情。
有了 Maven,以上这一切都不再是问题了。
看来Maven 要做的是两件事情:

1.统一开发规范与工具;
2.统一管理 jar 包。
一、使用前提
maven根路径

PATH = maven根路径/bin

maven根路径/bin

3.配置好之后,我们就可以执行maven命令了
mvn -v 显示maven版本信息

maven版本信息
二、了解 Maven 仓库
图解本地仓库与中央仓库

maven查找依赖的顺序

maven查找依赖的顺序
三、理解 pom.xml

pom.xml 称为 Project Object Model(项目对象模型),它用于描述整个 Maven 项目,所以也称为 Maven 描述文件。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.smart</groupId>
    <artifactId>smart-demo</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <name>smart-demo Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>smart-demo</finalName>
    </build></project>

从上往下简要说明:

modelVersion:这个是 POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改。

groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven **坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 **Maven 构件。

packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。

name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。

dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。

build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 smart-demo.war,这里的 finalName 还可以使用另一种方式来定义。

除了项目的基本信息(Maven 坐标、打包方式等)以外,每个 pom.xml 都应该包括:

Lifecycle(生命周期)

Plugins(插件)

Dependencies(依赖)

Lifecycle 是项目构建的生命周期,它包括 9 个 Phase(阶段)。

大家知道,Maven 是一个核心加上多个插件的架构,而这些插件提供了一系列非常重要的功能,这些插件会在许多阶段里发挥重要作用。
阶段插件作用:
clean
clean 清理自动生成的文件,也就是 target 目录
validate
由 Maven 核心负责 验证 Maven 描述文件是否有效
compile
compile 编译后产生target目录,里面存放的就是编译后的字节码文件
test
compiler、surefire、resources 运行测试代码
package
war 项目打包,就是生成构件包,也就是打 war 包
verify
由 Maven 核心负责,验证构件包是否有效
install
install 将构件包安装到本地仓库
site
site 生成项目站点,就是一堆静态网页文件,包括 JavaDoc
deploy
deploy 将构件包部署到远程仓库

四、使用 Maven 命令

可使用两种不同的方式来执行 Maven 命令:

方式一:mvn <插件>:<目标> [参数]

方式二:mvn <阶段>

现在我们接触到的都是第一种方式,而第二种方式才是我们日常中使用最频繁的,例如:

mvn clean:清空输出目录(即 target 目录)

mvn compile:编译源代码

mvn package:生成构件包(一般为 jar 包或 war 包)

mvn install:将构件包安装到本地仓库

mvn deploy:将构件包部署到远程仓库

执行 Maven 命令需要注意的是:必须在 Maven 项目的根目录处执行,也就是当前目录下一定存在一个名为 pom.xml 的文件。