基本概念:

# 依赖、坐标

依赖:项目跑起来需要的 jar 包

坐标:同样的jar包很多,你要哪一个。
(指定依赖的厂商、id、版本)

# 仓库

中央仓库、第三方仓库、本地仓库

# 项目结构

主要关注,pom.xmltarget

# 生命周期

生命周期 の 奇妙冒险

<mark>用命令行的形式,快速经历maven的整个生命周期</mark>

前提:配置好maven

1、创建:mvn archetype:generate

mvn archetype:generate -DgroupId=org.test -DartifactId=a-maven-test -DarchetypeArtifactId=maven-archetype-quickstart
  • mvn --核心命令
  • archetype:generate --创建项目
  • -DgroupId=org.test --包名的写法
  • -DartifactId=a-maven-test --项目名称
  • -DarchetypeArtifactId=maven-archetype-quickstart --表示创建的是[maven]java项目

可以用 DOS 命令:tree,查看项目结构

2、编译:compile

<mark>将 src/main/java 下的文件编译为 class 文件输出到 target 目录下</mark>

执行代码:mvn compile

3、测试:test

<mark>执行 src/test/java 下的单元测试类,生成测试报告</mark>

执行代码:mvn tset


测试报告(如下),记录了运行成功、失败、跳过的情况,测试的环境等。

4、清除:clean

<mark>清除 target 目录</mark>

执行代码:mvn clean

“回到最初的从前~”

5、打包:package

<mark>对于 java 工程打包成 jar 包,对于 web 工程打包成 war 包</mark>

执行代码:mvn package

生成的 target 目录,结构上等于 compile + test

<mark>但是,进入到 target 目录下,会多出个 jar/war 文件</mark>

6、发布:install

执行代码:mvn install

这次要看 install 后打印的信息:

说的是:

  • 把 jar 包部署到了 C:\\User\\uu\\.m2\\repository\\.............. 目录下(即我的本地仓库下)
  • 把 pom.xml 打包成 .pom 后缀的文件,也放在了我的本地仓库里面。

那么,之后

  • 其他项目依赖这个项目,就可以从本地仓库中拿依赖了~
  • 我们把本地仓库的 依赖发布上网,其他人也能用了~

版本统一、继承管理

建立一个 maven 工程 pom 类型
统一管理依赖以及版本号

<mark>先创建一个空的父工程</mark>(把src之类的目录删了)

<mark>创建子模块</mark>

<mark>父模块中写好 pom 和 child 的 声明</mark>

    ...
    
    <!--父模块声明-->
    <packaging>pom</packaging>
    <!--子模块-->
    <modules>
        <module>demo-child</module>
    </modules>
	...

最后,
<mark>父模块进行版本统一</mark>
<mark>子模块进行版本继承</mark>

父模块

<?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>com.spring</groupId>
    <!--项目名-->
    <artifactId>demo</artifactId>
    <!--项目版本-->
    <version>1.0-SNAPSHOT</version>

    <!--父模块声明:不能进行任何的代码逻辑-->
    <packaging>pom</packaging>
    <!--子模块-->
    <modules>
        <module>demo-child</module>
    </modules>

    <!--统一版本号-->
    <properties>
        <!--版本(标签名自定义)-->
        <spring-boot>2.2.5.RELEASE</spring-boot>
    </properties>

    <!--依赖们的管理-->
    <dependencyManagement>
        <!--一堆依赖-->
        <dependencies>

            <!--一个依赖-->
            <dependency>
                <!--组织-->
                <groupId>org.springframework.boot</groupId>
                <!--坐标名称-->
                <artifactId>spring-boot-starter</artifactId>
                <!--版本:交给properties统一管理-->
                <version>${spring-boot}</version>
            </dependency>

            <!--按住Alt+Insert插入依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot}</version>
            </dependency>
            
			<!--推荐:idea的 maven-helper 好用到怀疑eclipse-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <!--也能直接直接版本-->
                <version>3.8.1</version>
                <!--仅test生命周期使用-->
                <scope>test</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

子模块

<?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">
    <!--父模块的坐标。如果项目中没有归档某个元素的值,那么就从父模块中找值-->
    <parent>
        <artifactId>demo</artifactId>
        <groupId>com.spring</groupId>
        <version>1.0-SNAPSHOT</version>
        <!--模块间的相对位置,闭合标签默认为上一级文件夹内-->
        <relativePath/>
    </parent>
    <!--POM文件的模型版本。很少改变,必不可少。设计的初衷是为了引入Maven新特性和稳定性-->
    <modelVersion>4.0.0</modelVersion>

    <artifactId>demo-child</artifactId>

    <!--项目打包时候的类型。例如:(这里使用的)jar/war/(父项目的)pom/ear...-->
    <packaging>jar</packaging>

    <!--项目的名称,Maven产生的文档用-->
    <name>child-demo</name>
    <!--项目主页的URL,Maven产生的文档用-->
    <url>https://www.baidu.com</url>
    <!--项目的描述。Maven产生的文档用-->
    <description>A maven project to study maven.</description>


    <dependencies>
        <!--一个依赖:引用父组件的版本-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <!--不需要指定版本-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>