0%

maven

配置

  • 打开官网 下载bin.zip压缩文件,解压到本地后,设置环境变量
1
2
3
4
5
6
C:\Users\Administrator>mvn -version
Apache Maven 3.9.5 (57804ffe001d7215b5e7bcb531cf83df38f93546)
Maven home: E:\exe\apache-maven-3.9.5
Java version: 1.8.0_381, vendor: Oracle Corporation, runtime: E:\app\Java\jdk-1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
  • 在文件中我们要在文件中对下载相对于的jar包进行镜像配置,一般是使用阿里云镜像。
1
2
3
4
5
6
7
8
// apache-maven-3.9.5\conf\setting.xml
<!-- 拉去阿里镜像-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
  • 们还需要在里面配置本地的Maven仓库。下面这句话就是我的本地仓库位置。
1
<localRepository>D:\Maven\mm</localRepository>
  • 打开Idea然后选择File =》New =》 Project 得到下面的界面

image-20231114165504799

  • 在文件的创建过程中我们要选择修改Maven的仓库为本地的仓库

image-20231114170122121

  • 一个使用Maven管理的普通的Java项目,它的目录结构默认如下,如果没有就手动新建
1
2
3
4
5
6
7
8
9
10
testMvn
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ ├── java
│ └── resources
└── target
  • pom.xml就是引用依赖包

  • 存放Java源码的目录是src/main/java

  • 存放资源文件的目录是src/main/resources

  • 存放测试源码的目录是src/test/java,存放测试资源的目录是src/test/resources

  • 最后,所有编译、打包生成的文件都放在target目录里

分析pom

  • 分析pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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>org.example</groupId> <!--类似于Java的包名,通常是公司或组织名称 -->
<artifactId>testMvn</artifactId> <!--类似于Java的类名,通常是项目名称 -->
<version>1.0-SNAPSHOT</version>

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

</project>
  • 一个Maven工程就是由groupIdartifactIdversion作为唯一标识。我们在引用其他第三方库的时候,也是通过这3个变量确定。例如,依赖commons-logging
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>org.example</groupId>
<artifactId>testMvn</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>

使用<dependency>声明一个依赖后,Maven就会自动下载这个依赖包并把它放到classpath中

在D:\Maven\mm 本地仓库中可以看到自动下载的依赖文件

依赖关系

Maven定义了几种依赖关系,分别是compiletestruntimeprovided

scope 说明 示例
compile 编译时需要用到该jar包(默认) commons-logging
test 编译Test时需要用到该jar包 junit
runtime 编译时不需要,但运行时需要用到 mysql
provided 编译时需要用到,但运行时由JDK或某个服务器提供 servlet-api
  • 其中,默认的compile是最常用的,Maven会把这种类型的依赖直接放入classpath。

  • test依赖表示仅在测试时使用,正常运行时并不需要。最常用的test依赖就是JUnit:

1
2
3
4
5
6
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>

搜索第三方组件

后一个问题:如果我们要引用一个第三方组件,比如okhttp,如何确切地获得它的groupIdartifactIdversion?方法是通过search.maven.org搜索关键字,找到对应的组件后,直接复制:

image-20231114174716157

常用命令

  • mvn clean:清理所有生成的class和jar;

  • mvn clean compile:先清理,再执行到compile

  • mvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile

  • mvn clean package:先清理,再执行到package

更多详解参考这里,后续这里还有很多关于maven的知识等能用到的时候回头继续学习