原创

maven学习笔记


Maven基础知识

一、 为什么使用Maven

1.1、Maven提供了便捷管理Jar包的功能

-- 第三方jar包的添加 -- 第三方jar包的获取 -- 可以自动处理jar包依赖关系 -- 自动的处理jar包之间的冲突

1.2、Maven对项目进行模块化管理功能

-- Maven可以自动化的对项目进行拆分管理

二、什么是Maven

一款自动化构建管理项目的神器工具!专注服务于Java平台的项目构建和依赖管理。在JavaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁:Make→Ant→Maven→Gradle→其他……

三、Maven的使用(重点)

3.1、安装Maven

-- 解压 -- 配置环境变量 -- 命名规范 MAVEN_HOME -- 注意事项:一定保证当前系统有 JAVA_HOME 变量

3.2.、配置本地仓库和阿里云镜像

<localRepository>E:\LocalRepository</localRepository>
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

3.3、IDEA中集成Maven

​ -- settings相关配置 ​ -- Other Settings ​ -- 如果以上配置完后,重新打开IDEA依然生效的是默认的配置参考一下步骤解决 ​ https://blog.csdn.net/feilie01/article/details/102754451 ​

3.4、IDEA中对Maven的基本使用

-- Maven默认的项目目录结构(约定好的,不能认为更改) Hello -- src -- main -- java -- resource -- test -- java -- pom.xml

-- IDEA中对Maven工程的基本命令操作 -- clean 清理工作 -- compile 编译主程序代码 -- test 编译测试程序以及执行测试代码 -- package 打包操作 -- install 将打好的包安装到本地仓库

四、Maven核心概念

4.1、POM 项目对象模型

POM 项目对象模型抽象的概念,具体体现就是一个用pom.xml文件来描述整个模块的一种思想。

4.2、Maven约定的目录结构

​ -- Maven项目有自己的一套规范,有默认约定好的目录结构,之所以 ​ 能够自动化构建项目和管理jar包,完全取决于约定好的设计 ​

-- 约定 > 配置 > 编码

4.3、坐标

​ -- Maven中的坐标它就是体现当前Maven工程的唯一性,而且也是将来引用此jar包的 ​ 唯一路径 ​

​ -- Maven中坐标的命名规范

(1)groupId:公司或组织的域名倒序+当前项目名称 (2)artifactId:当前项目的模块名称 (3)version:当前模块的版本

4.4、依赖的管理

1). 依赖的概念:Maven项目之间可以通过坐标相互进行依赖

2). 以来的范围: -- compile(默认就是这个范围) (1)main目录下的Java代码可以访问这个范围的依赖 (2)test目录下的Java代码可以访问这个范围的依赖 (3)部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下 例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。 -- test (1)main目录下的Java代码不能访问这个范围的依赖 (2)test目录下的Java代码可以访问这个范围的依赖 (3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下 例如:对junit的依赖。仅仅是测试程序部分需要。

-- provided (1)main目录下的Java代码可以访问这个范围的依赖 (2)test目录下的Java代码可以访问这个范围的依赖 (3)部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下 例如:servlet-api在服务器上运行时,Servlet容器会提供相关API, 所以部署的时候不需要。

3). 依赖的传递性 -- 多个Maven工程之间相互依赖具有传递性,但是是否能够传递还要取决于被传递者的使用范围

4). 依赖的原则: -- 路径最短者优先 -- 如果路径相同声明者优先

4.5、生命周期

Maven有三套相互独立的生命周期,分别是:

  • Clean Lifecycle在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。
  • Site Lifecycle生成项目报告,站点,发布站点。(少有使用)

五、继承

5.1 为什么需要继承机制

由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置。例如:

Hello
junit
junit
4.0
test
HelloFriend
junit
junit
4.9
test
MakeFriend
junit
junit
4.10
test

此时如果项目需要将各个模块的junit版本统一为4.9,那么到各个工程中手动修改无疑是非常不可取的。使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理

5.2 创建父工程

修改父工程的打包方式为pom

<groupId>cn.lzhgy.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

5.3 在子工程中引用父工程

<!--继承-->
<parent>
    <groupId>cn.lzhgy.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>

此时如果子工程的groupId和version如果和父工程重复则可以删除。

5.4 在父工程中管理依赖

<!--依赖管理-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在子项目中重新指定需要的依赖,删除范围和版本号

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

第6章 聚合

在总的聚合工程中使用modules/module标签组合,指定模块工程的相对路径即可

<!--聚合-->
<modules>
    <module>../MakeFriend</module>
    <module>../OurFriends</module>
    <module>../HelloFriend</module>
    <module>../Hello</module>
</modules>

Maven可以根据各个模块的继承和依赖关系自动选择安装的顺序

第七章 Maven酷站

我们可以到http://mvnrepository.com/搜索需要的jar包的依赖信息。

http://search.maven.org/

maven

评论