`

Archiva与Nexus配置

 
阅读更多

 

从08年初开始使用Maven2至今,已经两年有半。期间我们一直在使用的Maven2 Repository管理工具是Apache的Archiva。在使用Archiva的过程中,遇到一些问题没有及时解决,主要有:

  1. 有些artifact不会通过配置的Archiva服务器下载;
  2. 有些artifact下载的压缩包有问题,而系统会认为下载成功,不会每次从Archiva再次下载正确的artifact。

由于没有时间对Archiva配置进行细致的研究,对于这些问题我们并没有解决,而是采用替代方案:

  1. 让那些artifact绕过Archiva服务器下载(反正绕过它也没遇到更到问题);
  2. 写脚本扫描并删除有问题的压缩包文件(要同时删除本地文件,以及Archiva服务器上的缓存文件),再次更新项目的Maven依赖后,会自动再次下载。

最近由于网络问题,一些artifact始终下载不了,所以下定决心去研究一下Archiva的配置。过程中也下载了一份Nexus并做了简单的对比,下面是对Archiva和Nexus配置的一些记载。

我理解的Archiva服务器工作方式:

  1. 当本地的Maven项目请求一个artifact时,会先去本地的Repository中查找;
  2. 若没有找到符合的artifact,则会向Archiva服务器请求该artifact,这是由于本地设置(~/.m2/settings.xml或%MAVEN_HOME%/conf/settings.xml中设置)了以Archiva服务器作为所有Repository的mirror
  3. Archiva服务器的Managed Repository会接收这个请求,并从Managed Repository中寻找符合条件的artifact;
  4. 若没有找到符合条件的artifact,会从设置了proxy connector的Remote Repository中寻找符合条件的artifact,如果找到则从Remote Repository中下载一份到Managed Repository中,并回应客户请求(发自我们本地的请求);
  5. 如果没有找到符合条件的artifact,Archiva服务器则返回404信息,交给本地处理(本地会再去配置的Repository列表中去查找)。
archiva reference 写道
A proxy connector is used to link a managed repository (stored on the Archiva machine) to a remote repository (accessed via a URL). This will mean that when a request is received by the managed repository, the connector is consulted to decide whether it should request the resource from the remote repository (and potentially cache the result locally for future requests).
 
配置Archiva mirror所有Repository的代码(~/.m2/settings.xml或%MAVEN_HOME%/conf/settings.xml中):
Xml代码   收藏代码
  1. <mirrors>  
  2.     <mirror>  
  3.         <id>archiva.default</id>  
  4.         <name>archiva.default</name>  
  5.         <url>http://localhost:8088/archiva/repository/internal</url>  
  6.         <mirrorOf>*</mirrorOf>  
  7.     </mirror>  
  8.     <mirror>  
  9.         <id>archiva.apache.snapshots</id>  
  10.         <name>archiva.apache.snapshots</name>  
  11.         <url>http://localhost:8088/archiva/repository/snapshots</url>  
  12.         <mirrorOf>apache.snapshots</mirrorOf>  
  13.     </mirror>  
  14. </mirrors>  

注意事项:
  1. 要保证Archiva找到符合的artifact,必须保证在Archiva中配置的Remote Repository中能够找到该artifact;
  2. 要想Archiva能够从Remote Repository中去找artifact,必须要对该Remote Repository设置一个proxy connector,否则Archiva从本地找不到artifact时不会去没有配置proxy connector的Remote Repository中找,这就是我们之前遇到的问题1的根源;
我理解的Nexus服务器工作方式:
  1. 当本地的Maven项目请求一个artifact时,会先去本地的Repository中查找;
  2. 若没有找到符合的artifact,则会从本地配置的Repository列表中按顺序去查找;
  3. 若当前查找的Repository是设置~/.m2/settings.xml或%MAVEN_HOME%/conf/settings.xml中设置为被Nexus mirror的,则向Nexus请求该artifact;
  4. Nexus接收请求后,会到相应的Repository中查找本地是否有该artifact的缓存,若有则返回给客户;
  5. 若没有,则从Repository中查找是否有该artifact,若有则从远处Repository下载一份在本地缓存;
  6. 若没有则返回客户,客户端会继续查找下一个Repository。
nexus reference 写道
When you encounter a project which contains a custom repository element in a pom.xml add this repository to Nexus as a new proxy repository and then add the new proxy repository to the public group.
 
配置Nexus mirror所有Repository的代码~/.m2/settings.xml或%MAVEN_HOME%/conf/settings.xml中):
Xml代码   收藏代码
  1. <mirrors>  
  2.     <mirror>  
  3.         <!--This sends everything else to /public -->  
  4.         <id>nexus</id>  
  5.         <mirrorOf>*</mirrorOf>  
  6.         <url>http://localhost:8081/nexus/content/groups/public</url>  
  7.     </mirror>  
  8. </mirrors>  
  9. <profiles>  
  10.     <profile>  
  11.         <id>nexus</id>  
  12.         <!-- Enable snapshots for the built in central repo to direct all requests to nexus via the mirror -->  
  13.         <repositories>  
  14.             <!-- Maven Central -->  
  15.             <repository>  
  16.                 <id>central</id>  
  17.                 <id>central</id>  
  18.                 <name>Maven Central</name>  
  19.                 <url>http://repo1.maven.org/maven2/</url>  
  20.                 <snapshots><enabled>false</enabled></snapshots>  
  21.             </repository>  
  22.   
  23.             <!-- Apache Snapshots -->  
  24.             <repository>  
  25.                 <id>apache-snapshots</id>  
  26.                 <name>Apache Snapshots</name>  
  27.                 <url>http://repository.apache.org/snapshots/</url>  
  28.                 <snapshots><enabled>true</enabled></snapshots>  
  29.             </repository>  
  30.   
  31.             <!-- Codehaus Snapshots -->  
  32.             <repository>  
  33.                 <id>codehaus-snapshots</id>  
  34.                 <name>Codehaus Snapshots</name>  
  35.                 <url>http://nexus.codehaus.org/snapshots/</url>  
  36.                 <snapshots><enabled>true</enabled></snapshots>  
  37.             </repository>  
  38.   
  39.             <!-- java.net - Maven 2 -->  
  40.             <repository>  
  41.                 <id>java.net-m2</id>  
  42.                 <name>java.net - Maven 2</name>  
  43.                 <url>http://download.java.net/maven/2/</url>  
  44.                 <snapshots><enabled>false</enabled></snapshots>  
  45.             </repository>  
  46.   
  47.             <!-- Google Code -->  
  48.             <repository>  
  49.                 <id>google</id>  
  50.                 <name>Google Code</name>  
  51.                 <url>http://google-maven-repository.googlecode.com/svn/repository/</url>  
  52.   
  53.             </repository>  
  54.   
  55.             <!-- jahia -->  
  56.             <repository>  
  57.                 <id>jahia</id>  
  58.                 <name>jahia</name>  
  59.                 <url>http://maven.jahia.org/maven2/</url>  
  60.                 <snapshots><enabled>false</enabled></snapshots>  
  61.             </repository>  
  62.   
  63.             <!-- SpringSide Additional Repository -->  
  64.             <repository>  
  65.                 <id>springside</id>  
  66.                 <name>SpringSide Additional Repository</name>  
  67.                 <url>http://springside.googlecode.com/svn/repository/</url>  
  68.                 <snapshots><enabled>false</enabled></snapshots>  
  69.             </repository>  
  70.   
  71.             <!-- Jboss Repository -->  
  72.             <repository>  
  73.                 <id>jboss</id>  
  74.                 <name>Jboss Repository</name>  
  75.                 <url>http://repository.jboss.com/maven2/</url>  
  76.                 <snapshots><enabled>false</enabled></snapshots>  
  77.             </repository>  
  78.         </repositories>  
  79.     </profile>  
  80. </profiles>  
  81.   
  82. <activeProfiles>  
  83.     <!--make the profile active all the time -->  
  84.     <activeProfile>nexus</activeProfile>  
  85. </activeProfiles>  
 
注意事项:
  1. 要保证Nexus去管理所有的artifact,必须设置Nexus mirror你项目中配置的所有Repository;
  2. 要在Nexus服务器中配置你mirror的所有Repository;

 

最后,关于问题2,应该是proxy connector中参数设置问题,只要把每个proxy connector的Checksum设置为fail,问题应该会自然解决。(之前配置的两个proxy connector的Checksum设置有问题,故有问题2发生;目前已更改配置,但是否解决问题仍需进一步跟踪)

 

参考地址:http://casheen.iteye.com/blog/730295

分享到:
评论

相关推荐

    archiva的安装

    Archiva支持多种协议,如HTTP、HTTPS和Nexus代理,可以作为Maven、Gradle和其他基于Apache Ivy的构建工具的本地或远程仓库。在这个指南中,我们将详细介绍如何安装和配置Archiva。 ### 1. 系统需求 在开始安装之前...

    maven私服apache-archiva-2.2.3-bin.tar.gz

    此外,Archiva支持多种插件,可以扩展其功能,例如与Artifactory或Nexus等其他仓库管理器进行互操作,或者集成身份验证机制来增强安全控制。 总的来说,Apache Archiva是一个轻量且专业的Maven私有仓库解决方案,...

    nexus-3.38.0-01-win64.zip

    - Nexus可以与Artifactory、Archiva等其他仓库管理器对比,选择适合项目需求的解决方案。 通过以上介绍,我们可以看到Nexus在Java开发中的重要性,它为开发者提供了一站式的依赖管理和构件部署平台,极大地提高了...

    使用Nexus搭建Maven私服

    因为新搭建的Nexus环境只是一个空的仓库,那么首先就需要与远程中心库进行同步,进行私有仓库索引更新。更新的方式有两种:自动方式、手动方式。 1.自动更新方式 开启远程索引自动更新(Central Repository),设置...

    this is nexus

    - **原因分析**:NEXUS配置的Proxy类型的仓库中未包含该JAR包。 - **解决方案**: - 在NEXUS主页左侧选择`View Repositories -&gt; Repositories`。 - 在右侧工具栏中选择`Add -&gt; Proxy Repository`。 - 配置`...

    ApacheArchiva使用手册中文word版最新版本

    Apache Archiva 是一款用于...在搭建 Maven 仓库服务器时,对比了 Sonatype Nexus 和 Apache Archiva,发现 Apache Archiva 在配置简便性和易用性方面表现突出。对于有兴趣深入了解的用户,可以下载本文档进行学习。

    在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(三)开发和发布自己开发的maven插

    可以选择使用Nexus、Artifactory等专业仓库管理工具,也可以简单地使用Apache Archiva。这里我们以Archiva为例,首先从官方网站下载最新版本的Archiva,然后解压并启动服务: ```bash wget ...

    maven下载、安装、配置与使用教程&相关项目

    ### Maven 下载、安装、配置与使用教程及相关项目详解 #### 一、Maven简介 Apache Maven 是一款广泛应用于 Java 项目的管理与构建自动化工具。它通过一系列规范化的生命周期和构建过程,使得 Java 项目的构建更加...

    Maven仓库链接下载

    3. 使用Maven依赖管理工具:如Apache Archiva、Nexus等,它们提供了图形界面来搜索和下载构件。 五、`.m2`目录详解 `.m2`目录是Maven默认的本地仓库路径,位于用户的主目录下。这个目录包含以下子目录: - `...

    linux搭建maven私库所需的安装包.zip

    6. **选择私库软件**:有几种常见的Maven私库管理软件,如Nexus、Artifactory和Archiva。这里以Nexus为例,从Sonatype官网下载Nexus的Linux二进制包,并解压到服务器的适当位置,如`/opt/nexus`。 7. **配置Nexus**...

    强悍的Maven学习资料

    Artifactory、Nexus 和 Archiva 是常见的私有仓库服务器,用于管理组织内部的依赖。 ### 8. Artifactory Maven 配置 Artifactory 是 JFrog 公司提供的企业级 Maven 仓库,可以通过配置 Maven 的 settings.xml 文件...

    Maven学习全教程.doc

    3. Archiva:一个功能强大且灵活的Maven仓库管理工具。 Artifactory Maven 配置 ------------------------- Artifactory是一个功能强大且灵活的Maven仓库管理工具,以下是Artifactory的Maven配置: 1. 在pom.xml...

    maven2.2.1分享下

    4. **支持更多仓库格式**:增加了对多种仓库格式的支持,包括 Nexus 和 Archiva 等企业级 Maven 仓库。 5. **问题修复**:2.2.1 版本修复了大量已知的问题,增强了软件的稳定性。 ** Maven 的使用场景 ** 1. **...

    SunGlass:使用 Java 8 和 Spark 框架的轻量级 Maven 存储库代理

    它旨在成为其他 Maven 存储库软件(如 Artifactory、Sonatype Nexus 和 Archiva)的轻量级替代品。 注意:需要 JAVA 8! 为什么? 因为 Spark 是 Java 8。建造本项目使用 Gradle 构建。 它还需要 Java 8。要构建,...

    CodeConnect:用于可视化基于 Neo4j 图形数据库服务器的项目依赖关系的 UI

    编辑项目构建文件中的 buildscript 依赖项部分以使用您的依赖项管理器(例如 Artifactory、Nexus、Archiva 等) 编辑 settings.gradle 以在所有项目中使用稳定的项目名称 (1) (1) 项目必须始终有一个名称。 在 ...

    gpg加密签名2.0-版本

    通过Nexus或Apache Archiva等仓库管理器,可以轻松完成这一操作。上传成功后,中央仓库会验证签名,只有签名正确且匹配的工件才会被接受并展示给其他开发者。 总之,PGP加密签名在Maven上传至中央仓库的过程中起到...

Global site tag (gtag.js) - Google Analytics