Maven 核心知识

本文详细介绍了Maven的核心知识,包括坐标系统的定义、项目的三套classpath、依赖范围及传递性、Maven仓库管理(中央仓库、本地仓库、私服)、生命周期与插件以及Maven的继承、聚合和私服配置。通过理解这些概念,开发者能更好地掌握Maven的使用和项目管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1).坐标

groupId:组织名称+”.”+项目名称
artifactId:项目的模块名
version:项目坂本号

 <!-- pom 版本号 -->
  <modelVersion>4.0.0</modelVersion>
 <!-- 组织名称+项目名 -->
  <groupId>com.hsp.maven</groupId>
  <!-- 模块名称 -->
  <artifactId>makeFriend</artifactId>
  <!-- SNAPSHOT 指正在开发的版本,RELEASE指成熟版本 -->
  <version>0.0.1-SNAPSHOT</version>
  <!--
       工程打包后的类型 
       如果是web项目就是war包
  -->
  <packaging>jar</packaging>

  <name>makeFriend</name>
  <url>http://maven.apache.org</url>

2).maven项目有三套classpath

1.Java主目录的classpath
2.test测试目录的claspath
3.运行时的classpath
依赖范围:就是指定的一个依赖包对哪些classpath有效,用配置依赖的范围。
常用的依赖范围有:compile,test,provided,runtime

<!-- 对第三方的依赖管理 -->
  <dependencies>
    <dependency>
    <!-- 依赖包的坐标 -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

compile:项目编译时需要这个包,三套classpath都需要的包
test:只对test的classpth有效
provided:只对test和Java主目录的classpth有效
runtime:只对运行时的classpath有效

3).依赖传递

假设:
A←B 第一直接依赖
B←C 第二直接依赖
那么:
A←C 间接依赖
所以:
依赖的传递是受依赖的范围影响的;

当依赖不同版本同一个jar包时:A对log4j1.2.9依赖,B对log4j1.2.9依赖,C会依赖1.2.8的,就近原则;

可选依赖:true指定依赖包不会传递下去,false指定依赖包会传递下去;

4).maven仓库管理

1.中央仓库
互联网上一个巨大的maven仓库,这里面有绝大多数的依赖包,但是也有少数的依赖包不再中央仓库里面。例如:http://mvnrepository.com/ ,在这里可以找到中央仓库的依赖包的坐标;
2.本地仓库
默认在:~/.m2/repository/ 就是本地仓库,当执行maven命令或者添加依赖包时,如果本地仓库不存在需要的依赖,maven会到中央仓库去把所需要的依赖下载到本地仓库,如果第二次再使用相同的依赖,就不需要下载了。本地仓库可以上传或安装自己的依赖包,使用命令是mvn install;

这里写图片描述

3.私服仓库
下面会讲解;

5).maven生命周期

清理—编译—测试—报告—打包—部署

maven生成站点信息:clean site

maven的插件,我们执行的是生命周期,真正做事的是插件,每一个生命周期都会绑定一个或者多个插件:

这里写图片描述

在pom.xml添加一个插件如下:

<build>
    <plugins>
      <plugin>
        <!-- 插件的坐标 -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
          <finalName>filename-of-generated-jar-file</finalName>
          <attach>false</attach>
        </configuration>
      </plugin>
    </plugins>
  </build>

6).maven继承

子工程需要父工程的模块,直接在子工程的pom配置父工程的坐标即可。

<!-- parent用于继承 -->
  <parent>
    <!-- 父工程的坐标 -->
    <groupId>com.hsp.maven</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- 父工程pom的相对路径 -->
    <relativePath>../parent/pom.xml</relativePath>
  </parent>

7).maven聚合

当子工程的数量增多时,可以把它们聚合用一个父工程里面,统一管理,父工程执行maven命令时,被聚合的子工程也会执行。

 <modules>
    <module>../son</module>
    <module>../brother</module>
    <module>../sister</module>
    <module>../daughter</module>
  </modules>

8).maven私服

访问外网的maven仓库很不方便,为了速度更快和团队开发,可以在本地和中央仓库之间建立一个私服。(也可以应用于公司内网)

这里写图片描述

安装nexus和建立索引后,在浏览器访问tomcat的nexus,由上图可以看出nexus相当与一个中间缓冲,更加细致管理本地的jar包;

这里写图片描述

在用户的setting.xml下配置nexus,这样当maven项目需要jar时,会先在nexus中查找,当nexus没有时,才会去中央仓库找;

 <mirror>
       <id>nexus</id>
       <!-- 拦截任何请求 -->
       <mirrorOf>*</mirrorOf>
       <!-- 将请求转发到本地nexus -->
       <url>http://localhost:8080/nexus/content/groups/public/</url>
     </mirror>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值