Maven学习笔记

一:Maven

  好处:管理项目,为项目提供统一的开发、测试、打包和部署,能让开发者在多个项目中方便的切换。

二:Maven工作原理

  maven采用远程仓库、本地仓库和pom.xml。
  过程:在运行maven命令的时候,会去加载pom.xml文件,就可以知道该项目中都需要引用哪些jar了。
  请求顺序:请求本地  —> 请求私服  -->请求其他 远程仓库  --> 请求中央仓库,如果没有找到需要的构件,则会报错。

 正常情况下jar包存在于三个地方, Local仓库,Nexus私服仓库,镜像或者maven中央仓库。

step1: 当maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;
访问私服,找不到的话,私服会去访问远程别的仓库,找到了会将jar包缓存的到自己这里; step2: 如果本地仓库不存在此构件,maven会访问私服,下载到本地再使用;
step3:私服上没有的话,私服是由能力去访问其他远程仓库的,它会遍历其他的远程仓库,找到需要的构件之后,会缓存到私服上,以便下次使用; step3: 如果本地仓库和远程仓库都没有需要的构件,会去中央仓库仓库查找。中央仓库是maven核心自带的远程仓库,它包含了绝大部分开源的构件; step4: 如果都没有找到,maven就会报错。

  图:

   

三:仓库

maven仓库分为两类:本地仓库和远程仓库。远程仓库中又分成了3种:私服,其他公共库,中央仓库

     

本地仓库:也就是 .m2/repository目录
私服:是特殊的远程仓库,在局域网内使用
主流的的私服: Apache的Archiva、JFrog的Artifactory、Sonatype的Nexus
其他公有仓库:

远程仓库:

  是通过<repositories>、<repository>变签实现的在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。

<repositories>
    <repository> 
    </repository>
    <repository> 
    </repository>
</repositories>

私服:

好处:
1.减少宽带和时间; 
2.降低中央仓库的压力,中央仓库是公有的,大家都可以访问,所以访问速度会有限制;
3.有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用。这种情况我们需要把jar包手动上传到私服;
4.公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面。

 补充:私服就是我们配置的镜像服务器,镜像就是私服,只是不同地方命名不同,都是仓库,不用纠结名称。

<mirrors> 
     <mirror>  
         <id>nexus</id>  
         <name>internal nexus repository</name>  
         <url>http://183.238.2.182:8081/nexus/content/groups/public/</url>  
         <mirrorOf>*</mirrorOf>  
     </mirror>  
</mirrors>

镜像mirrors:

<mirrors>
  <mirror>
      <id>intranet repository</id>
      <name>intranet repository</name>
      <url>http://171.1.1.111:9000/nexus/content/groups/public</url>
      <mirrorOf>*</mirrorOf>
  </mirror>
  <mirror>
      <id>public repository</id>
      <name>public repository</name>
      <url>http://171.2.2.38:9000/nexus/content/groups/public</url>
      <mirrorOf>*</mirrorOf>
  </mirror>
</mirrors>

中央仓库:是maven自带的远程的仓库,包含了绝大部分开源的构建。

中央仓库不需要手动配置,默认的是:  http://repo1.maven.org/maven2/
当然了也可以覆盖中央仓库,在mirrors中修改,将mirrorOf的属性值设置为central即可。
1. http://www.sonatype.org/nexus/
2. http://mvnrepository.com/ (推荐仓库)
3. http://repo1.maven.org/maven2

四:如何处理下载失败

pom.xml经常就报找不到某某某jar包的错,很烦很头疼。正常情况下jar包存在于三个地方, Local仓库,Nexus私服仓库,镜像或者maven中央仓库。以所列出的顺序为准,搜索的过程由前往后,下载的过程由后往前。下载过程分两段,镜像或者maven中央仓库=>Nexus私服仓库,Nexus私服仓库=>Local仓库,两段都可能出问题。出问题也没事,重试,但maven会在Local仓库中生成一份以lastUpdated结尾的文件,一个错误的缓存(cache)。需要手动删除缓存。

先判断是哪一段出错,选择Repositories=>Central=>Brower Storage,看一下对应的jar包在Nexus私服上面有没有,没有的话说明镜像或者maven中央仓库=>Nexus私服仓库下载失败,否则Nexus私服仓库=>Local仓库下载失败。

镜像或者maven中央仓库=>Nexus私服仓库下载失败处理方法

删除Local仓库的缓存。打开~/.m2/repository文件夹,删除报错jar包所在的文件夹(也可以只删除特定的子文件,提高效率)。删除Nexus私服仓库的缓存。Repositories=>Central=>Brower Storage,选择对应的目录树,右键先Expire Cache,后Delete。

Nexus私服仓库=>Local仓库下载失败处理方法

这种情况简单很多,只要删除Local仓库的缓存即可。步骤如上。

五:maven jdk 配置

新建的项目,报错提示说,maven与jdk的版本不匹配。于是在Build Path中进行修改,之后update project之后,又会回到之前的jdk版本,所以需要在配置文件中进行配置,这样每次更新项目,jdk版本就不会改变了。

setting.xml文件:
<profile> <id>jdk1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>

参考:https://www.cnblogs.com/bianqi/p/6819074.html

原文地址:https://www.cnblogs.com/quan-coder/p/8145872.html