Maven中的库(repository)详解

Maven中的库(repository)是构件(artifact)的集合。构件以一定的布局存储在库中。

Maven中的库(repository)可以分为本地库和远程库。本地库在安装Maven的计算机上的指定路径下(通常是用户主目录下的.m2/repository),本地库中的构件往往是远程库中下载到本地的部分构件,被本地项目所引用。当然,本地项目发布时,默认也发布到本地库中。远程库往往是由第三方提供的,用于发布构件供项目下载使用,如著名的Maven central库。

根据构件的用途,构件可以分为两类,一类是被其他构件依赖的构件(dependencies),这也是Maven库中主要的构件。另一类是插件(plugins),这是一种特殊的构件。对于依赖的构件,其所在的库通过<repositories>设置。但是对于插件的构件,由于插件的特殊性,所以插件库独立于依赖库,使用<pluginRepositories>单独设置。但是由于依赖和插件都属于构件,所以<repositories>和<pluginRepositories>中的设置基本一致。

如果一个项目需要依赖一个构件,Maven编译的时候会首先从本地库查找该构件。如果本地库中没有,再根据配置的远程库信息,逐个去远程库中查找该构件。

如果在远程库中找到则下载到本地库,如果在所有的远程库中都没有则会抛出编译异常。

Maven中要配置库,可以有多种方式。最直接的是在项目中的pom.xml文件中,通过<repositories>配置库,这样配置的库仅适用于当前项目。也可以通过<profiles>中的<repositories>配置在特定环境下的特殊库,这可以在项目的pom.xml文件中实现,也可以在Maven的settings.xml中实现。

此外,一个项目发布后,其往往要被部署到一个库中,作为库的构件以供其他项目引用。通过<distributionManagement>中的<repositories>配置要发布的库。

1. 在pom.xml或settings.xml中设置<repositories>,往往需要提供一个<repository>的如下信息:

  • id,库的ID
  • name,库的名称
  • url,库的URL
  • layout,在Maven 2/3中都是default,只有在Maven 1.x中才是legacy
  • releases,库中版本为releases的构件
  • snapshots,库中版本为snapshots的构件

根据构件的版本,可以将构件分为releases类型的构件和snapshots类型的构件。

对于一个构件,其版本的变化是否会引起库中更新该构件呢?则需要根据库的<releases>或<snapshots>设置。<releases>和<snapshots>的设置参数一致,如下所示:

  • enabled,是否支持更新
  • updatePolicy,构件更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily
  • checksumPolicy,校验码异常的策略,可选值有ignore, fail, warn

在pom.xml中定义<repository>的示例如下:

  <repositories>
    <repository>
      <releases>
        <enabled>false</enabled>
        <updatePolicy>always</updatePolicy>
        <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
        <checksumPolicy>fail</checksumPolicy>
      </snapshots>
      <id>codehausSnapshots</id>
      <name>Codehaus Snapshots</name>
      <url>https://repository-master.mulesoft.org/nexus/content/groups/public/</span></url>
      <layout>default</layout>
    </repository>
  </repositories>


2.在pom.xml中的<distributionManagement>,负责管理构件的发布包和其他编译生成的支撑文件。

在<distributionManagement>中也可以配置一个<repository>。这里的<repository>给出的是当前项目部署后所发布的库,示例如下:

  <distributionManagement>
    <repository>
      <uniqueVersion>false</uniqueVersion>
      <id>corp1</id>
      <name>Corporate Repository</name>
      <url>scp://repo/maven2</url>
      <layout>default</layout>
    </repository>
    <snapshotRepository>
      <uniqueVersion>true</uniqueVersion>
      <id>propSnap</id>
      <name>Propellors Snapshots</name>
      <url>sftp://propellers.net/maven</url>
      <layout>legacy</layout>
    </snapshotRepository>
    ...
  </distributionManagement>
该<repository>的url是当前Maven项目的构件所发布的地址(但是注意,未必是访问该构件的地址)。

<distributionManagement>中还可以配置一个<snapshotRepository>,表示开发过程中的发布库。<snapshotRepository>的设置与<repository>一样。如果没有设置<snapshotRepository>,还可以将<repository>用作<snapshotRepository>。

关于<distributionManagement>的具体用法参见后续文章。


3.在pom.xml或settings.xml中的<profile>中都可以设置<repositories>或<pluginRepositories>其中的<repository>设置与在<profile>外设置<repositories>中的<repository>一样。

<profile>中的<repositories>表示在该<profile>环境中所特有的库。

关于<profile>的具体用法参见后续文章。

### 回答1: Maven默认使用公共仓来存储和管理依赖。如果下载的Maven没有repository,可能是因为您没有在本地配置Maven,或者是使用了一个不包含仓Maven发行版。您可以在Maven的配置文件settings.xml中配置本地仓的路径,或者使用包含仓Maven发行版。 ### 回答2: Maven是Java项目的构建工具、管理工具以及依赖管理工具,可以实现自动化构建、依赖管理、各种类型的报告生成等。在使用Maven时,下载的Maven可能没有repository,这就会导致无法通过Maven来获取所需依赖的jar包。以下是针对这种情况的一些解决方法: 1. 检查Maven的配置文件settings.xml 在使用Maven过程中,Maven会自动在settings.xml文件中配置相应的镜像,用于下载依赖的jar包。因此,如果下载的Maven没有repository,可以先检查该文件是否存在。如果该文件不存在,可以手动创建相应的settings.xml文件,并在其中添加相应的镜像。 2. 更换Maven的镜像源 如果Maven的配置文件中已经存在镜像,但下载的Maven依然没有repository,则可以考虑更换镜像源。通常Maven的默认镜像源是中央仓,如果该仓出现问题,则会导致repository无法下载。解决方法是可以使用其他可用的镜像源,如阿里云、华为云等常见的镜像源。 3. 手动添加依赖jar包 如果下载的Maven依然无法通过Maven来获取依赖jar包,则可以考虑手动下载所需的依赖jar包,并将其添加到项目的classpath中。通常情况下,手动添加依赖jar包不会遇到太大的问题,但是需要注意版本号的匹配,避免出现版本不兼容的情况。 总之,在出现下载的Maven没有repository的情况时,可以先检查Maven配置文件的设置是否正确,是否存在镜像等问题。如果检查无误,可以考虑更换镜像源或手动添加依赖jar包的方式来解决问题。 ### 回答3: Maven作为一个项目管理工具,可以很方便地下载和管理项目依赖的Jar包,并且这些Jar包是从仓中下载的。当我们使用Maven下载Jar包时,如果出现“Maven没有repository”的错误提示,这通常是由以下原因造成的: 1. 没有配置Maven的仓地址:Maven默认会去中央仓中下载Jar包,但有时我们需要从其他仓中下载依赖的Jar包。这就需要我们在Maven配置文件(settings.xml)中指定要使用的仓地址,如果没有配置会导致无法下载依赖。 2. 仓地址错误:如果配置了仓地址但地址错误,或者仓的服务器无法访问,也会导致Maven无法下载Jar包。 3. 工程依赖的Jar包没有上传到仓中:通过Maven发布自己的Jar包时,需要将Jar包上传到指定的仓中。如果Jar包上传失败或未上传,会导致其他工程在下载依赖Jar包时出现这种错误。 解决这种错误的方法有以下几个: 1. 检查配置文件:确保Maven的配置文件中指定的仓地址正确,并且配置文件没有错误。 2. 检查网络连接:检查网络连接是否正常,是否可以访问配置的仓地址,是否需要代理等。 3. 检查上传Jar包:确保上传到仓的Jar包与工程依赖的Jar包一致,以及上传是否成功。 最终,如果以上方法都无法解决问题,建议使用其他的Maven地址,或者从其他的网址上下载需要的jar包并手动添加到Maven本地仓中即可。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值