Maven工程学习
1.Maven工程结构
注意:本文中的父亲文件统一为一个POM文件,也就是普通工程放置在POM文件工程下面
1.非配置文件(普通的代码文件)
1.src文件主要存放项目的主代码
pom.xml文件主要进行文件的配置,进行文件的依赖管理
2.配置文件(POM文件 注意 不是pom.xml)
一个大项目中的规范性文件,没有src文件,只有pom.xml文件
理解:一个大型项目中由多个人进行分工合作各个小项目,每个人的小项目在编写时都需要使用各
自的依赖包,这样会导致最后项目合并时依赖不兼容而导致问题,POM文件的引入相当于
一个父亲文件,他不需要src文件存放代码,只需要在pom.xml文件中规范统一的依赖包,
然后各个小项目在各自的pom.xml文件中去继承父亲文件也就是POM文件的pom.xml文件
中的各个依赖就行(该文件定义了所有子模块的公共配置和依赖关系。这个父POM通常不包 含源代码或资源,它的主要目的是管理和配置子模块。)
如mirco-shop-pom就是一个POM文件:
2.src文件
- main文件中放置代码文件
- test文件放置测试文件
3.pom.xml文件
1.三大标签
包含了<groupId>和<artifactId>和<version>,是一个maven项目的唯一坐标,可以理解为用来定位这个maven项目的(后面在本地仓库引用别的项目的依赖时会用到)
-
<groupId>
-
定义:groupId 是项目组织唯一的标识符,它通常是公司或组织的域名倒写。例如,Apache 的 groupId 是
org.apache
。 -
作用:它有助于区分不同的项目,尤其是在多个项目可能有相同的 artifactId 时。groupId 通常与组织的结构相关。
-
示例:
com.example.mycompany
-
-
<artifactId>
-
定义:artifactId 是项目的唯一标识符,它通常是项目的名称或模块的名称。
-
作用:artifactId 与 groupId 一起唯一地标识一个 Maven 项目。当你想在项目中引用其他库或依赖项时,你会使用这两个标识符来找到它。
-
示例:如果你正在开发一个名为 "my-app" 的应用程序,那么 artifactId 可能是
my-app
。
-
-
<version>
-
定义:version 是项目的版本号。Maven 使用它来识别项目的特定版本。
-
作用:版本号有助于区分同一项目的不同发布版本。你可以使用 Maven 的依赖管理功能来指定你想要使用的特定版本。
-
示例:
1.0.0
、2.5.3-SNAPSHOT
等。版本号可以包含主版本号、次版本号和增量版本号(如1.2.3
),以及可能的快照(SNAPSHOT)或发布候选(RC)标记。
-
例外:父Mavne项目下的子Maven项目的<version>标签可以进行Java的重写
功能,也就是写子项目的版本
如:
父文件:
子文件:
2 package标签
1.java项目用jar形式打包,web工程用war形式打包,配置项目用pom形式打包
注:pom文件相当于一个大型开发中的进行所有依赖的管理的规范的文件,没有src文件
3 Maven的依赖
1.依赖的传递
-
存在一个依赖a依赖于另一个依赖b,b又依赖于c,那么当Maven导入依赖a时,依赖b和c自动导入
-
第一个依赖路径:a依赖于b(版本1.8.3),b依赖于c(版本1.5.3)
第二个依赖路径:d依赖于b(版本2.4.5)
先进行导入依赖a的操作,再进行导入依赖d的操作,此时导入的则是a,d,b(版本1.8.3)
解释:1.先进行的操作则先导入:a的导入需要b(1.8.3)
d的导入需要b(2.4.5),此时发生冲突,因为a先操作,所以b(1.8.3)就进行导入
2.依赖路径发生冲突时,后面的路径传递自动结束。也就是a的导入需要b(1.8.3)
d的导入需要b(2.4.5),此时发生冲突,导入b(1.8.3)之后,c的导入就不执行
解决办法:手动导入
2.单一项目文件配置依赖
所有依赖工程放到<dependencies></dependencies>标签之中,在其中使用<dependency></dependency>标签放入依赖的配置(找依赖可以去Maven Repository: Search/Browse/Explore (mvnrepository.com)
在里面能直接复制所需要的依赖的maven工程的代码块,就是下图)
3.多个项目文件或者包含有父文件
在父文件中使用<dependencyManagement></dependencyManagement>再在里面使用<dependencies></dependencies>标签,配置各个依赖项目
父文件中的配置:
这样,在子文件中进行依赖的下载时就不用再去引用<version>标签来说明该依赖的版本号了
子文件:
4.一个子项目去导入另外一个子项目形成的依赖
将一个子项目进行mvn install操作
该子项目版本信息
另外一个子项目进行导入
注意:每一次依赖导入后都要进行更新!!!
注:依赖导入时若本地仓库存在相关依赖的不完整文件时会导入失败,需要清理干净再导入,同时通过阿里云的镜像访问也会失败!!!
4.Maven的构建
1.Maven编译、清理、测试、打包项目(这里直接使用idea的maven工具)
mvn clean(clean)
:- 作用:清理项目。执行该命令后,Maven会删除项目中生成的目标文件和临时文件,包括编译得到的class文件、打包文件以及项目构建过程中生成的其他临时文件。
mvn compile(compile)
:- 作用:编译项目的主代码。它会将src/main/java目录下的Java源代码编译为class文件,并输出到target/classes目录中。
mvn test(test)
:- 作用:执行项目中的单元测试。它会编译和执行src/test/java目录下的测试代码,并生成测试报告。
mvn package(package)
:- 作用:将项目打包为可部署的格式,如JAR文件或WAR文件。执行该命令后,Maven会自动执行项目的编译、测试和打包等过程,并将打包结果输出到target目录下的对应文件夹中,如target文件夹下的jar或war文件。
mvn install(install)
:- 作用:将项目打包并安装到本地Maven仓库中。除了执行
mvn package
的所有操作外,还会将生成的JAR或WAR文件安装到本地Maven仓库中,供其他项目依赖使用。
- 作用:将项目打包并安装到本地Maven仓库中。除了执行
mvn deploy(deploy)
:- 作用:将项目发布到远程Maven仓库中。它首先会执行
mvn install
的所有操作,然后将生成的JAR或WAR文件发布到指定的远程Maven仓库中,供其他开发者或项目下载和使用。
- 作用:将项目发布到远程Maven仓库中。它首先会执行
mvn site(site)
:- 作用:生成项目站点文档。Maven可以根据项目的
pom.xml
文件和配置,自动生成项目的站点文档,包括项目报告、依赖关系图等。
- 作用:生成项目站点文档。Maven可以根据项目的
mvn verify(verify)
:- 作用:验证项目是否满足质量标准。它会对项目进行测试和检查,确保项目满足预设的质量标准,如代码覆盖率、测试通过率等。
注意:这里的每个命令都是由相对应的插件执行而成的!!!
一般的直接执行install命令时会自动的执行install前面的几个命令如clean package,方便了操作
2.父项目中modules标签
其中插入了子项目的名称,可以在父项目maven中执行构建命令时一起将标签中的子文件一起进行构建,减少了操作,当然子项目之间的引用需要事先进行单独的构建操作,可以不写入父项目的modules标签之中