关于maven的使用问题记录

本文参考:https://www.cnblogs.com/hongmoshui/p/10762272.html 

 

一、maven的setting文件

1、settings.xml文件一般存在于maven安装目录下的 conf 文件夹下,也会存在于用户本地仓库.m2的子目录下面,比如 ./m2/setting.xml

2、这两个的相互作用是怎样的呢:

这个涉及到它的优先级:conf 下的配置文件是全局的,用户.m2目录下是仅针对当前用户的,所以一般.m2下是不存在的(或者说不需要存在,但为允许存在的原因是如果有自定义的需求,就可以从conf下拷贝一份到用户目录下了,如果有相同配置,就会以当前用户的配置为准,否则还是以全局变量的为准的。

所以如果发现,使用了当前用户目录下的setting.xml 时,还会从conf下的文件去下载依赖,就不奇怪了。

 

二、setting 的mirror 要怎样配置

每到一家公司,都会去修改一些mirror(因为都会配置私库,所以要配置私库的一些镜像呀?)

 

 

三、setting 的其它配置有什么用,是怎样用的

 

Servers

作用:一般,仓库的下载和部署是在pom.xml文件中的repositories 和 distributionManagement 元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在 settings.xml 中。

如下图,应该是在pom的distributionManagement 指定了具体的私库,然后,要鉴权用户密码,但不能明写在pom上面,所以就定义了一个仓库id, 与 <server>中的 匹配

<distributionManagement>
    <repository>
        <id>server001</id>
        <url>xxxx</url>
    </repository>
</distributionManagement>


<!--配置服务端的一些设置。一些设置如安全证书不应该和pom.xml一起分发。这种类型的信息应该存在于构建服务器上的settings.xml文件中。 -->
<servers>
  <!--服务器元素包含配置服务器时需要的信息 -->
  <server>
    <!--这是server的id(注意不是用户登陆的id),该id与distributionManagement中repository元素的id相匹配。 -->
    <id>server001</id>
    <!--鉴权用户名。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。 -->
    <username>my_login</username>
    <!--鉴权密码 。鉴权用户名和鉴权密码表示服务器认证所需要的登录名和密码。密码加密功能已被添加到2.1.0 +。详情请访问密码加密页面 -->
    <password>my_password</password>
    <!--鉴权时使用的私钥位置。和前两个元素类似,私钥位置和私钥密码指定了一个私钥的路径(默认是${user.home}/.ssh/id_dsa)以及如果需要的话,一个密语。将来passphrase和password元素可能会被提取到外部,但目前它们必须在settings.xml文件以纯文本的形式声明。 -->
    <privateKey>${usr.home}/.ssh/id_dsa</privateKey>
    <!--鉴权时使用的私钥密码。 -->
    <passphrase>some_passphrase</passphrase>
    <!--文件被创建时的权限。如果在部署的时候会创建一个仓库文件或者目录,这时候就可以使用权限(permission)。这两个元素合法的值是一个三位数字,其对应了unix文件系统的权限,如664,或者775。 -->
    <filePermissions>664</filePermissions>
    <!--目录被创建时的权限。 -->
    <directoryPermissions>775</directoryPermissions>
  </server>
</servers>

 

Mirrors

作用:用于定义一系列的远程仓库的镜像。我们可以在pom中定义一个下载工件的时候所使用的远程仓库。但是有时候这个远程仓库会比较忙,所以这个时候人们就想着给它创建镜像以缓解远程仓库的压力,也就是说会把对远程仓库的请求转换到对其镜像地址的请求。每个远程仓库都会有一个id,这样我们就可以创建自己的mirror来关联到该仓库,那么以后需要从远程仓库下载工件的时候Maven就可以从我们定义好的mirror站点来下载,这可以很好的缓解我们远程仓库的压力。在我们定义的mirror中每个远程仓库都只能有一个mirror与它关联,也就是说你不能同时配置多个mirror的mirrorOf指向同一个repositoryId。

(原来每个仓库都会有一个 repositoryId, 那 centrel 也是一个仓库id ? )

<mirrors>
  <!-- 给定仓库的下载镜像。 -->
  <mirror>
    <!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
    <id>mirrorId</id>
    <!-- 镜像名称 -->
    <name>PlanetMirror Australia</name>
    <!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
    <url>http://downloads.planetmirror.com/pub/maven2</url>
    <!-- 被镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库(http://repo.maven.apache.org/maven2/)的镜像,就需要将该元素设置成central。这必须和中央仓库的id central完全一致。 -->
    <mirrorOf>repositoryId</mirrorOf>
  </mirror>
</mirrors>

再比如

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

那这个意思就是 central 也是阿里云的一个仓库的id, 

 

posted @ 2022-04-09 12:38  aaacarrot  阅读(46)  评论(0编辑  收藏  举报