maven

它是什么

一个包管理器,对于一个java web 项目来说,常需要大量的第三方包,那么maven 就能够提供一个导入第三方包的服务,同时解决了一些第三方包冲突的问题,第三方包在maven 项目中也称为依赖,一下统称第三方包为依赖

第三方包是什么呢?

是一个经过打包的jar 文件,可以理解为一个提供了一些功能的“java文件”压缩包。

为什么要达成jar 包?

方便管理,一个jar 包提供某项功能
保护源码,可以在打包时加入混淆逻辑,使对方只能够使用其服务,而不能获得其服务的源码,常用于付费服务

pom.xml

maven 项目最常用的就是pom文件,对项目上的依赖的修改只需要改动这个文件即可

<?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>
        <groupId>com.XXX</groupId>
        <artifactId>XXX-parent</artifactId>
        <version>1.2.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

	<groupId>com.XXX</groupId>
    <artifactId>XXX</artifactId>
    <name>XXX</name>

    <dependencies>
        <!-- 依赖服务列表 -->
        <dependency>
            <groupId>com.XXX</groupId>
            <artifactId>XXX</artifactId>
            <version>1.2.1-SNAPSHOT</version>
        </dependency>

        <!-- 德邦MQ客户端依赖 -->
        <dependency>
            <groupId>com.XXX.XXX</groupId>
            <artifactId>XXX-X-XXX</artifactId>
            <version>1.0.4</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>XXX-releases</id>
            <name>XXX Releases Repository</name>
            <url>http://XXX.cn</url>
        </repository>
    </repositories>

</project>

丛上往下pom 文件依次分为

  • parent
    · 用于定义该pom 文件依赖于哪一个文件,当多个pom 项目共有同一种特征,都引入某些依赖的时候,就可以将这些共性抽离成一个父项目,然后其他项目就可以不引入那些重复的依赖,只需要定义父项目就可以
  1. groupId:可以看到,在parent 里面和外边都有这个标签,它的作用就是标识组织。想一想maven 作为广泛使用的工具,jar 包又有成千上万个,如果不能有效地区分不同包,当你需要A包,maven 给你提供了一个同名的B包,这样的工具显然是失败的。groupId 的规则就是编写这个maven 项目的公司的网站的域名反写
    比如,阿里巴巴的官网alibaba.com
  2. io第三方包 java 第三方jar包是什么_第三方包

  3. 那么阿里巴巴所开发的项目的groupId 就是com.alibaba
  4. io第三方包 java 第三方jar包是什么_jar_02

  5. artifactId 是项目的名称,一般是项目经理规定好,对于自己的项目叫阿猫阿狗也没人管你,能区分开就好
  6. version 一个项目正常来说需要不断地更新迭代,新的版本更新旧的版本也必须要存在,因为如果有另外的项目引入了旧版本的依赖,如果删掉了旧版本会导致其他的项目发生莫名其貌的问题,所以用version 区分发布的不同版本
    通过以上三个标签就能够准确定位到一个依赖,在parent 中声明说明是其依赖继承了parert 项目中的依赖,而在parent 标签外定义的作用是:能够让其他项目准确定位到自己
  • modelVersion 是maven 模型的的版本,默认就写4.0.0
  • name 是给人类看的,可以随便定义
  • dependencies 是 dependency 的父标签,dependency 外面都必须有一层dependencies嵌套
  • dependency 核心标签,声明需要的依赖
  1. 当你某天收到了一个需求:需要解析json文件,恰巧的是原有的工具包又不足以满足需求,你又得知alibaba有一个库叫fastjson能很快捷的实现这个需求
  2. mvn 仓库找到 fastjson 的依赖
  3. io第三方包 java 第三方jar包是什么_jar_03


  4. io第三方包 java 第三方jar包是什么_jar_04

  5. 可以看到在项目上已经能够调用fastJson提供的包
  6. io第三方包 java 第三方jar包是什么_java_05

  7. depandancy 里面的内容不建议手写,除非你已经能够非常自信的知道自己需要的依赖的groupId artifactId 和 version 信息
  • repositories 设置依赖的仓库地址,在里面可以设置若干个子标签repository 意味着你可以设置多个仓库
  1. 仓库是什么?
    · 首先设想一下,如果不设置仓库会依赖要从哪里下载,一定是每一家公司单独设置一个服务器,然后指定每一个你需要的依赖的下载url,麻烦而且没有一个统一的规范。
    · 真正的使用场景:大家遵循一个规范,将自家的依赖都放到这个仓库上面,对于其他的使用这类来说只需要定义这个仓库的地址,然后让maven 自己去判断要下载哪个依赖
    · maven 有两个中心仓库,但是在国内下载速度十分堪忧,通常会指定一个镜像仓库
    · 通常情况下你不需要在设置仓库地址,因为常用的依赖都能中心仓库或者镜像仓库中找到,但是对于某些公司的内部项目来说,将自己的核心包没必要也不应该公开放在中心仓库,所以他们会搭建私服仓库,你作为内部项目的开发者你需要设置私服仓库地址,下载内部依赖

  • 有时候编译器(IDEA)会抽风,关闭重新打开项目
  • 修改后依赖要加载一遍pom,它不会主动加载改变
  • io第三方包 java 第三方jar包是什么_io第三方包 java_06

  • 重新加载pom,个人认为IDEA 的maven 插件的Reload project 不怎么好用
  • io第三方包 java 第三方jar包是什么_maven_07

  • 首选还是
  • io第三方包 java 第三方jar包是什么_jar_08

  • 找不到这个图标时
  • io第三方包 java 第三方jar包是什么_io第三方包 java_09


  • io第三方包 java 第三方jar包是什么_第三方包_10

  • 任意输入一个字符,然后加载改变,之后再删掉字符就能后再次加载