- 中央仓库 - https://mvnrepository.com/
基本概念:
# 依赖、坐标
依赖:项目跑起来需要的 jar 包
坐标:同样的jar包很多,你要哪一个。
(指定依赖的厂商、id、版本)
# 仓库
中央仓库、第三方仓库、本地仓库
# 项目结构
主要关注,pom.xml
和 target
# 生命周期
生命周期 の 奇妙冒险
<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>