87、【JavaEE】【Maven】Maven

2021-10-01  本文已影响0人  yscyber

1、概述

依赖管理:依赖指的就是是项目中需要使用的第三方 JAR 包。一个大一点的工程往往需要几十上百个 JAR 包,按照传统的方式,每使用一种 JAR,就需要导入到工程中,还要解决各种 JAR 包冲突的问题。Maven 可以对 JAR 包进行统一的管理,包括快速引入 JAR 包,以及对使用的 JAR 包进行统一的版本控制

项目结构标准化:Maven 提供了一个标准化的 Java 项目结构,可以通过 Maven 快速创建一个标准的 Java 项目。

2、Maven 安装与配置

3、Maven 仓库

4、Maven 工程涉及的概念

4、Maven 工程的结构

|---pom.xml
|---+src
|---------+main
|---------------+java
|---------------+resources
|---------------+webapp
|---------------------+WEB-INF
|-----------------------------web.xml
|---------+test
|---------------+java
|---+target

上述带“+”的表示“目录”,不带“+”的表示“文件”。
上述的结构以及名称一般不能随意更改。
webapp目录是使用 Maven 构建 Web 类型的工程时特有的。

pom.xml:是 Maven 工程的核心配置文件,每一个 Maven 工程有一个pom.xml文件。

src:源码
src/main/java:存放 Java 源码的目录
src/main/resources:存放配置文件的目录
src/main/webapp:存放 Web 资源的目录
src/test:存放测试代码的目录

target:项目构建(编译)后形成的目录

类路径:类的源文件.java经过编译后形成的.class文件所在的路径。

4、使用 IDEA 创建 Maven 工程

Maven-3 Maven-4 Maven-5 Maven-6

5、Maven 工程中核心配置文件 — pom.xml

5.1、配置文件常用整体结构

<?xml version="1.0" encoding="UTF-8"?>
<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>4.0.0</modelVersion>

    <groupId>······</groupId>
    <artifactId>······</artifactId>
    <version>······</version>
    <packaging>······</packaging>

    <properties>
         ······
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>······</dependency>
            <dependency>······</dependency>
            ······
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>······</dependency>
        <dependency>······</dependency>
         ······
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    ······
                </plugin>
                <plugin>
                    ······
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                ······
            </plugin>
            <plugin>
                ······
            </plugin>
        </plugins>

        ······
    </build>

</project>

5.2、GAV

    <groupId>······</groupId>
    <artifactId>······</artifactId>
    <version>······</version>

5.3、构建后形式

<packaging>war</packaging>
<packaging>jar</packaging>
<packaging>pom</packaging>

5.4、依赖管理

    <dependencies>
        <dependency>······</dependency>
        <dependency>······</dependency>
         ······
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>······</dependency>
            <dependency>······</dependency>
            ······
        </dependencies>
    </dependencyManagement>
<!-- 一个“依赖”单元,使用 <dependency> 标签,其中包裹依赖的 GAV -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
<!-- 导入“依赖”,在 <dependencies> 标签中包裹“依赖”单元  -->

    <dependencies>

        ······

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

        ······

    <dependencies>

<groupId>:GroupId,GAV 中的 G,必要标签
<artifactId>:ArtifactId,GAV 中的 A,必要标签
<version>:version,版本,GAV 中的 V,必要标签
<scope>:该依赖作用域,可选标签,常见的有providedtestcompile等。

compile:默认作用域(当没有<scope>标签时)。compile表示依赖需要参与当前项目的编译,当然后续的测试,运行周期也参与其中。打包的时候通常需要包含进去。

provided:意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude(排除)的动作。

test:表示依赖仅仅参与测试相关的工作,打包阶段也是exclude(排除),典型的如 Junit。

<!-- 在 <dependencyManagement> 中声明依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
<!-- 统一声明版本等信息 -->
                <version>4.0.1</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.3.3</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<!-- 正式导入依赖 -->
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
<!-- 只需 GA,无需再写其他的,因为上面已经对依赖进行了完整的声明 -->
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
        </dependency>
    </dependencies>

<dependencyManagement>标签中包括<dependencies>标签,但是在<dependencyManagement>标签中不代表导入依赖,真正导入依赖需要在与<dependencyManagement>标签同级的<dependencies>标签下。

<dependencyManagement>标签中是对依赖进行声明,这个声明中所使用的依赖单元(<dependency>)是完整的,GAV 和其他的一些标签该写的都写上。声明之后,在正式导入依赖的时候,依赖单元中,只需写 GA 即可。

5.5、插件管理

5.6、其他

6、Maven 常用命令

7、其他

上一篇 下一篇

猜你喜欢

热点阅读