Maven

Apache Maven 的作用

Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个 POM(Project Object Module 项目对象模型),中间画框部分即 Maven:

Maven 文件一览

bin 文件夹

maven 的所有可运行指令,里面的 mvn 是核心文件,

boot 文件夹

一般 boot 翻译为启动,里面的 plexus-classworlds-2.6.0.jar 文件是类管理器

conf 文件夹

配置文件夹,里面的 logging 是日志,settings.xml 是核心文件

lib 文件夹

包含 maven 运行所依赖的 jar 包

LICENSE 文件

协议

NOTICE 文件

注意事项

README.txt 文件

Apache Maven 的相关说明

Maven 基础知识

一、Maven 的坐标

作用:用于描述仓库中资源的位置

描述:由 groupld、artifactld、version 组成

groupld:定义当前 maven 项目隶属组织名称(通常是域名反写,如:com.xiaotuan)

artifactld:定义当前 maven 项目名称(通常是模块名称,如:CRM、SMS)

version:定义当前项目版本号

packaging:定义改项目的打包方式

举例:写入 maven 中的代码

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

二、去中央仓库找 jar 包

网站:mvnrepository.com

三、常用 mvn 命令

编译
mvn compile

清除
mvn clear

测试
mvn test

打包
mvn target

安装到本地仓库
mvn install

Maven 项目一览

Maven-JAVA / Maven-WEB 项目一览:

PS:一般一个工程一个 pom.xml,但如果分模块的话,每个模块则单独有一个!

IDEA 操作一览

新建 Maven-JAVA / Maven-WEB 项目

文件 > 项目结构 > 模块 > ➕ > 新建模块 > Maven > 从原型创建[√] > maven-archetype-quick / maven-archetype-webapp > 如下:

父项 None
位置 空文件夹
Groupld com.xiaotuan
Artifactld 通常与名称一致
archetypeCatalog internal

然后直接点击确定,让 maven 自主运行一段时间,再返回 项目结构 继续配置:

最后项目结构如图所示:

可以在代码右侧进行 maven 的操作:

tomcat 启动 web 工程

在官方网站:https://mvnrepository.com 下载 tomact 插件

这里我们选择比较旧的稳定版 Apache Tomcat Maven Plugin :: Tomcat 7.x » 2.1

在添加配置中添加 maven 运行命令 tomcat7:run,名称为:启动服务器

然后点击运行,我们就可以访问本地 web 服务器(localhost)啦~

这里附上我 web 工程的 pom.xml 文件:

<?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">
    <!-- 指定 pom 的模型版本 -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 组织ID -->
    <groupId>com.xiaotuan</groupId>
    <!-- 项目ID -->
    <artifactId>TEST_WEB</artifactId>
    <!-- 版本号:完成版 release, 开发版 snapshot -->
    <version>1.0-SNAPSHOT</version>
    <!-- 打包方式:web 工程打包为 war, java 工程打包为 jar -->
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <!-- 设置当前工程的所有依赖 -->
    <dependencies>
        <!-- 具体的依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>

    <!-- 构建 -->
    <build>
        <!-- 设置插件 -->
        <plugins>
            <!-- 具体插件配置 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

依赖管理

依赖传递

直接依赖:相差 1 度的为直接依赖

间接依赖:相差 2 度或以上的为间接依赖

依赖冲突

路径优先:度数小的覆盖度数大的(如图所示)

声明优先:同层配置,前面的覆盖后面的

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>
<!-- 下面的依赖中包含上面的依赖 -->
<dependency>
    <groupId>com.xiaotuan</groupId>
    <artifactId>TEST_WEB</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

特殊优先:同级配置,后面的覆盖前面的

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

可选依赖

添加一个标签 optional,并设置为 true

效果:别人用你的依赖时,optional 为 true 的依赖被隐藏,别人无法使用

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <optional>true</optional>
</dependency>

排除依赖

添加一个标签 exclusions,并在其中添加所要排除的依赖 exclusion

效果:你不想用别人的某个依赖,在 exclusions 中添加 不想用的依赖 exclusion 即可

<dependency>
    <groupId>com.xiaotuan</groupId>
    <artifactId>TEST_WEB</artifactId>
    <version>1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupld>log4j</groupld>
            <artifactld>log4j</artifactld>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

添加一个标签 scope,并设置为依赖的范围

效果:仅在依赖的范围中,依赖才生效

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

依赖范围的传递性,如图所示:

项目构建生命周期

一般分为三套:

  1. clean:清理工作

  2. default:核心工作,例如编译,测试,打包,部署等

  3. site:产生报告,发布站点等

clean

default

site

插件

插件与生命周期内的阶段是绑定的,所需插件也可在官网查看:https://maven.apache.org/plugins/index.html

Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的

下面以 source 插件为例,作用是:执行到生命周期中的 generate-test-resources 时,生成 jar 包(生成名称:TEST_JAVA-1.0-SNAPSHOT-sources.jar)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven 高级用法

我参考的视频为黑马程序员,但我懒得再学下去了,等需要了再学吧~

喜欢划水摸鱼的废人
原文地址:https://www.cnblogs.com/CourserLi/p/15399813.html