maven

一篇非常好的文章建议先看这篇

下载与安装

下载地址:https://dlcdn.apache.org/maven/
安装过程:https://www.runoob.com/maven/maven-setup.html

重要知识点

  • 本地仓库,远程仓库,私服之间的关系:
    在这里插入图片描述
    私服:其实就是将远程仓库(在海外,访问速度极慢)的资源拉取到公司的服务器上存着,这样开发使用的时候直接从公司服务器拉取非常的快。
    访问过程:先找本地的仓库(就是存储在计算机上已经下载好的jar包),如果找不到在去私服拉取,还是找不到再去中央仓库寻找。
  • 坐标(本质就是包的存储位置)
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
#maven根据配置的dependcy配置去拉取jar包,包括去那个组找,什么版本。
<dependency>
 <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.6.2</version>
</dependency>
  • 镜像仓库
 <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>        
 </mirror>

特别说明一下mirrorOf:
1)关于mirrorOf配置的几个通配符号

<!-- 官方文档-->
* = everything 代理所有的仓库
external:* =  除了本地缓存之后的所有仓库
repo,repo1 = 代理repo,repo1库
*,!repo1 = 所有仓库除了repo1

以上面的xml为例解释一下含义,它的意思是在访问maven的central库的时候,将请求重定向到我们配置的阿里镜像库,就是是说用我们配置的这个阿里库作为central库的镜像。其中central是仓库的id能够代表一个仓库,也就是说我们平时下载包的时候请求是直接访问国外的仓库,配置了mirror后访问central库的请求会被定向到我们配的http://maven.aliyun.com/nexus/content/groups/public/这个库,就不再访问外网了,提高了下载速率,但是如果不是访问central库的请求不会被转发,还是改访问哪里就访问哪里。所以说mirrorOf本质上是相当是指定我们代理那个仓库,代理后我们就是访问镜像仓库。

  • 关于repositories
    如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
<repositories>
  <repository>
   <id>companyname.lib1</id>
     <url>http://download.companyname.org/maven2/lib1</url>
  </repository>
  <repository>
     <id>companyname.lib2</id>
     <url>http://download.companyname.org/maven2/lib2</url>
  </repository>
 </repositories>

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
1 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
2 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
3 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
4 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

原文链接:https://www.runoob.com/maven/maven-repositories.html
实践案例:
我要下载geotools的相关包但是maven仓库并没有所以在setting.xml做如下配置:
需要注意的是千万不要把mirrorOf配置成为*,否则所有的库都被拦截走阿里仓库了。

<profiles>
 <profile>
      <id>dev</id>
      <repositories>
      <repository>
        <id>osgeo</id>
        <name>OSGeo Release Repository</name>
        <url>https://repo.osgeo.org/repository/release/</url>
        <snapshots><enabled>false</enabled></snapshots>
        <releases><enabled>true</enabled></releases>
      </repository>
      <repository>
        <id>osgeo-snapshot</id>
        <name>OSGeo Snapshot Repository</name>
        <url>https://repo.osgeo.org/repository/snapshot/</url>
        <snapshots><enabled>true</enabled></snapshots>
        <releases><enabled>false</enabled></releases>
      </repository>
    </repositories>
      <!-- repositories and pluginRepositories here-->
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>

包依赖范围

Maven有以下几种依赖范围:

  • compile(默认):编译依赖范围,使用此依赖范围对于编译、测试、运行三种classpath都有效,即在编译、测试和运行时都要使用该依赖jar包;
  • test:测试依赖范围,只对测试有效,表明只在测试的时候需要,在编译和运行时将无法使用该类依赖,如 junit;
  • provided:已提供依赖范围。编译和测试有效,运行无效。如servlet-api,在项目运行时,tomcat等容器已经提供,无需Maven重复引入;
  • runtime:运行时依赖范围。测试和运行有效,编译无效。如 jdbc 驱动实现,编译时只需接口,测试或运行时才需要具体的 jdbc 驱动实现;
    system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用。

原文链接:https://blog.csdn.net/peerless_hero/article/details/57428763

关于冲突解决

参考下文:
https://blog.csdn.net/justry_deng/article/details/98665086

关于引用第三方包

转载:
在Maven中,使用第三方库一般是通过pom.xml文件中定义的dependency从远程repository中下载该库。但是如果库文件是公司内部的库,或者在本地而不能通过远程repository下载,这种情况下,有两种方法可以满足需求。

方法一:

将本地的jar文件安装到本地repository中,具体步骤如下:
1、准备好本地的jar文件
2、使用如下命令安装jar文件
mvn install:install-file -Dfile=abc.jar
-DgroupId=com.mycompany.myproduct -DartifactId=abc
-Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
其中,-Dfile制定jar文件的位置。执行完该命令后,会在本地repository(通常是$HOME/.m2目录)中出现一个目录(com),在其下会有一个abc-1.0.jar的文件和一个自动产生的pom文件。
3、安装完之后,在另一个应用程序中使用它的时候,只要在pom文件中指定相应的dependency就可以,如:

     <dependencies>
          <dependency>
          <groupId>com.mycompany.myproduct</groupId>
          <artifactId>abc</artifactId>
          <version>1.0</version>
       </dependency>
    </dependencies>

方法二:

该方法与前面的方法不同之处在于它不会安装任何库文件,只是在应用程序中的pom文件中指定jar文件的目录
即可,在pom中的dependency中如下设置:

<dependencies>
     <dependency>
     <groupId>com.mycompany.myproduct</groupId>
     <artifactId>abc</artifactId>
     <version>1.0</version>
     <scope>system</scope>
     <systemPath>/home/root/abc.jar</systemPath>
  </dependency>
</dependencies>

其中的scope被设置成system,默认是compile,指出dependency不是去repository中查找,而是在系统目录
中查找。systemPath指定了jar文件的绝对路径。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值