[Maven基础-学习笔记]

567 阅读2分钟

Maven基础

Maven是一个Java项目管理和构建工具, 类似NPM

Maven 结构

a-maven-project
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       ├── java
│       └── resources
└── target

项目的根目录a-maven-project是项目名
它有一个项目描述文件pom.xml
存放Java源码的目录是src/main/java
存放资源文件的目录是src/main/resources
存放测试源码的目录是src/test/java
存放测试资源的目录是src/test/resources
最后,所有编译、打包生成的文件都放在target目录里。这些就是一个Maven项目的标准目录结构。

项目描述文件pom.xml

<project ...>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.itranswarp.learnjava</groupId>
  <artifactId>hello</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <properties>
        ...
  </properties>
  <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
  </dependencies>
</project>
  • groupId类似于Java的包名,通常是公司或组织名称
  • artifactId类似于Java的类名,通常是项目名称,再加上version

依赖关系 (何时需要jar包)

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.3.2</version>
    <scope>test</scope>
</dependency>
  • compile 编译时需要用到该jar包(默认)commons-logging
  • test 编译Test时需要用到该jar包 junit
  • runtime 编译时不需要,但运行时需要用到 mysql
  • provided 编译时需要用到,但运行时由JDK或某个服务器提供

Tip

  1. jar包一旦被下载过,就会被Maven自动缓存在本地目录(用户主目录的.m2目录)
  2. 下载慢可配置镜像仓库: 在用户主目录下进入.m2目录,创建一个settings.xml配置文件
<settings>
    <mirrors>
        <mirror>
            <id>aliyun</id>
            <name>aliyun</name>
            <mirrorOf>central</mirrorOf>
            <!-- 国内推荐阿里云的Maven镜像 -->
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
</settings>

构建流程(Lifecycle/Phase/Goal)

lifecycle相当于Java的package,它包含一个或多个phase;

phase相当于Java的class,它包含一个或多个goal;

goal相当于class的method,它其实才是真正干活的。

  • 生命周期(lifecycle): 包含一系列阶段(phase)

    Tip default 生命周期如下 > >validate >initialize >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 >pre-integration-test >integration-test >post-integration-test >verify >install >deploy

  • 生命周期clean: 依次执行pre-clean/ clean / post-clean

  • 常用命令

    mvn clean:清理所有生成的class和jar; mvn clean compile:先清理,再执行到compile; mvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile; mvn clean package:先清理,再执行到package。

模块管理

  • Maven可以有效地管理多个模块,我们只需要把每个模块当作一个独立的Maven项目,它们有各自独立的pom.xml
  • 在编译的时候,需要在根目录创建一个pom.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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itranswarp.learnjava</groupId>
    <artifactId>build</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>build</name>

    <modules>
        <module>parent</module>
        <module>module-a</module>
        <module>module-b</module>
        <module>module-c</module>
    </modules>
</project>

mvnw(Maven Wrapper)

  • 某些项目需要特定的Maven版本时,Maven Wrapper就是给一个项目提供一个独立的,指定版本的Maven给它使用

  • 安装Maven Wrapper最简单的方式是在项目的根目录(即pom.xml所在的目录)下运行安装命令:

mvn -N io.takari:maven:0.7.6:wrapper

发布Artifact(略)