Maven私有远程存储库设置

 手机用户2502908277 发布于 2023-02-07 09:08

我正在尝试为我们的团队建立一个私人远程存储库.现在存储库提供以下服务,到目前为止我已经尝试过 -

当发出' mvn compile '时,它会搜索"〜/ .m2"中的依赖项.如果在那里找不到它,那么它将进入远程私有存储库,当依赖关系仍然不存在时,它将进入中央存储库.

在编译之前,我必须将所有依赖项与校验和和元数据一起放在我们的私有(和远程)存储库中.

当我们需要一个工件(例如 - spring-mvc)时,我们需要将它与该工件的所有依赖项(spring-mvc)一起放在远程私有存储库中.在这种情况下,从我们的远程私有存储库下载"spring-mvc".但是,"spring-mvc"的依赖关系不会从我们的远程私有存储库下载.它们从中央存储库下载.

现在我要做的是 -

以这样一种方式配置专用远程存储库"R",即我不必手动将所有依赖项放入其中.当首先发出"mvn编译"时; 在"〜/ .m2"中搜索依赖项,如果没有找到,则它将转到私有远程存储库"R".如果在'R'中找到依赖关系,那么"〜/ .m2"将从'R'获得它.如果在'R'中找不到依赖关系,则从中央存储库下载这些依赖关系,并将依赖关系保存在'R'中以供进一步使用.之后'〜/ .m2'将从'R'获得它们.在这里,我不需要手动将依赖项放在我们的远程私有存储库"R"中.

'〜/ .m2'将从远程私有存储库'R'获取"spring-mvc"(这是我项目的pom.xml中提到的主要依赖项)的所有依赖项,并且'R'将从相应的中央存储库获取它们.

任何人都可以建议某种方式/或教程参考以满足上述两个目标吗?提前致谢.

编辑:我尝试过Nathaniel Waisbrot的回答和nexus-2.7.0-06-bundle.经过几个小时的努力,我可以在使用jre-7时进行设置.使用jre-6,无法启动nexus.但我们的项目是使用JDK-6部署的.我们不想更改当前jre版本.用jre-6 apache-archiva就行了.但我不确定我是否能够实现上一节中的所有目标.是否有任何archiva用户/专家可以告诉我是否可以在上一节中实现这些目标?

2 个回答
  • 我已经设置nexus镜像我的maven本地存储库(at ~/.m2/repository.)由于这篇文章仍然被很多人访问过,我认为如果我分享我如何配置nexus为存储库管理器,那将对其他人有所帮助.这个程序对我来说非常适合Ubuntu 12.04.这里是 -

    1.下载nexus-2.11.1-01-bundle.tar.gz或最新版本的nexus oss.

    2.解压缩您主目录中的tar文件 -

    $ tar -xvf nexus-2.11.1-01-bundle.tar.gz
    

    现在您将获得两个目录 - nexus-2.11.1-01sonatype-work在您的主目录中.

    3.将这两个目录复制到/usr/local/目录(它们可以复制到其他地方) -

    $ cp -r nexus-2.11.1-01 /usr/local/
    $ cp -r sonatype-work /usr/local/
    

    与nexus相关的可执行文件/配置文件存储在nexus-2.11.1-01目录中,并且提到的jar文件pom.xml存储在sonatype-work目录中.
    这些jar文件是你的镜像~/.m2/repository.第一次发出mvn package命令时,所有jars都存储在此处.在此之后mvn package再次发布时,所有jar都从nexus存储库下载,而不是从中央存储库下载.

    4.转到/usr/local/目录 -

    $ cd /usr/local/  
    

    5.创建一个链接nexus-2.11.1-01-

    $ sudo ln -s nexus-2.7.0-06 nexus
    

    6.现在在终端中运行nexus类型 -

    $ bash nexus/bin/nexus console  
    

    这里nexus与您的控制台相连.如果关闭控制台,则nexus服务器将被终止.当您尝试为Ubuntu服务器计算机运行nexus时,您可以使用屏幕.

    注意:尝试使用上面的命令运行nexus时可能会出现2个问题.如果您没有发现任何问题,请跳过下面的2个步骤(步骤7和8)

    7.由于许可不足,可能会出现第一个问题.阅读错误消息并采取必要步骤.但作为一种快速解决方案,您可以这样做 -

    $ sudo chmod -R 777 nexus-2.11.1-01/
    $ sudo chmod -R 777 sonatype-work/
    

    8.如果您使用的任何jdk版本低于java 7,则可能会显示以下错误消息 -

    包装| 启动JVM ...包装器| 加载应用程序时JVM退出.jvm 1 | 线程"main"中的异常java.lang.UnsupportedClassVersionError:org/sonatype/nexus/bootstrap/jsw/JswLauncher:不支持的major.minor版本51.0

    在这种情况下,使用jdk7来运行步骤6中提到的命令.在ubuntu中它非常简单.假设你有两个jdk - jdk6和jdk7.您的项目在jdk6上运行.然后只有运行nexus你可以从你的终端这样做(假设你的jdk7在/usr/lib/jvm/jdk1.7.0_45目录中) -

    $ export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
    $ export PATH=$JAVA_HOME/bin:$PATH  
    

    9.现在在浏览器中键入地址 - http:// localhost:8081/nexus /.如果步骤1到6(如果发生错误,然后是步骤1到8)完美地完成,您可以成功找到登录屏幕.默认登录用户名是 - admin,密码是 - admin123

    10.停止连接.只需关闭终端或 在步骤6的终端按Ctrl + C. 在您的~/.m2目录中创建一个名为 - 的空文件settings.xml.将以下内容复制到此settings.xml文件中 -

    <settings>
        <mirrors>
            <mirror>
            <!--This sends everything else to /public -->
                <id>nexus</id>
                <mirrorOf>*</mirrorOf>
                <url>http://localhost:8081/nexus/content/groups/public</url>
            </mirror>
        </mirrors>
    
        <profiles>
            <profile>
                <id>nexus</id>
                <!--Enable snapshots for the built in central repo to direct -->
                <!--all requests to nexus via the mirror -->
                <repositories>
                    <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                    </repository>
                </repositories>
    
                <pluginRepositories>
                    <pluginRepository>
                        <id>central</id>
                        <url>http://central</url>
                        <releases><enabled>true</enabled></releases>
                        <snapshots><enabled>true</enabled></snapshots>
                    </pluginRepository>
                </pluginRepositories>
            </profile>
        </profiles>
    
        <activeProfiles>
        <!--make the profile active all the time -->
            <activeProfile>nexus</activeProfile>
        </activeProfiles>
    </settings>
    

    11.在项目pom.xml文件中添加以下行-

    <distributionManagement>
        <snapshotRepository>
            <id>my-snapshots</id>
            <name>My internal repository</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
    
        <repository>
            <id>my-releases</id>
            <name>My internal repository</name>
            <url>http://localhost:8081/nexus/content/repositories/releases</url>
        </repository>
    </distributionManagement>
    

    2023-02-07 09:10 回答
  • Sonatype Nexus可以满足您的所有需求,只需要很少的配置就可以满足您的要求,而且界面也很棒.在" Maven内部存储库,问题真的很难吗? " 下的基本设置有一些细节.

    基本上,您可以将Nexus设置为缓存存储库:您的Maven客户端将只访问内部存储库.当内部存储库找不到工件时,它会转到Central(或您定义的任何其他外部存储库),为您提取它,并将其存储以供日后使用.

    这很酷,因为如果你想从一个依赖于抓取的依赖关系 - 你想要的免费转换到一个锁定的环境,Nexus让它变得简单.您将其设置为从中央提取,从干净的计算机运行您的构建(强制Nexus摄取所有当前的Central依赖项),然后关闭代理 - repo功能(因此任何新的/更改的依赖项将由devops管理).

    2023-02-07 09:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有