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
- jar包一旦被下载过,就会被Maven自动缓存在本地目录(用户主目录的.m2目录)
- 下载慢可配置镜像仓库: 在用户主目录下进入.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