maven

下载与安装

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

重要知识点

  • 本地仓库,远程仓库,私服之间的关系:
    maven_第1张图片
    私服:其实就是将远程仓库(在海外,访问速度极慢)的资源拉取到公司的服务器上存着,这样开发使用的时候直接从公司服务器拉取非常的快。
    访问过程:先找本地的仓库(就是存储在计算机上已经下载好的jar包),如果找不到在去私服拉取,还是找不到再去中央仓库寻找。
  • 坐标(本质就是包的存储位置)

#maven根据配置的dependcy配置去拉取jar包,包括去那个组找,什么版本。
<dependency>
 <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
    <version>2.6.2version>
dependency>
  • 镜像仓库
 <mirror>
    <id>alimavenid>
    <name>aliyun mavenname>
    <url>http://maven.aliyun.com/nexus/content/groups/public/url>
    <mirrorOf>centralmirrorOf>        
 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.lib1id>
     <url>http://download.companyname.org/maven2/lib1url>
  repository>
  <repository>
     <id>companyname.lib2id>
     <url>http://download.companyname.org/maven2/lib2url>
  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>devid>
      <repositories>
      <repository>
        <id>osgeoid>
        <name>OSGeo Release Repositoryname>
        <url>https://repo.osgeo.org/repository/release/url>
        <snapshots><enabled>falseenabled>snapshots>
        <releases><enabled>trueenabled>releases>
      repository>
      <repository>
        <id>osgeo-snapshotid>
        <name>OSGeo Snapshot Repositoryname>
        <url>https://repo.osgeo.org/repository/snapshot/url>
        <snapshots><enabled>trueenabled>snapshots>
        <releases><enabled>falseenabled>releases>
      repository>
    repositories>
      
    profile>
  profiles>
  <activeProfiles>
    <activeProfile>devactiveProfile>
  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就可以,如:


com.mycompany.myproduct
abc
1.0

方法二:

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

 
      
      com.mycompany.myproduct
      abc
      1.0
      system
      /home/root/abc.jar
   

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

你可能感兴趣的:(Java,maven,java,intellij-idea)