我正在尝试为我们的团队设置一个私人远程存储库。现在存储库服务于以下内容,到目前为止我已经尝试过 -
当发出' 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
用户/专家可以告诉我我是否可以在上一节中实现这些目标?
答案 0 :(得分:42)
我已经设置 nexus
来镜像我的maven本地存储库(~/.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-01
和sonatype-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
目录中,pom.xml
中提到的jar文件存储在sonatype-work
目录中。
这些jar文件是~/.m2/repository
的镜像。首次发出mvn package
命令时,所有jar
都存储在此处。之后再次发出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时,您可以使用screen.
注意:尝试使用上述命令运行nexus时可能会出现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,你可以从终端执行此操作(假设您的/usr/lib/jvm/jdk1.7.0_45
目录中的jdk7) -
$ 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>
答案 1 :(得分:8)
Sonatype Nexus可以提供您想要的一切,只需要很少的配置就能满足您的要求,而且界面也很棒。关于“Maven Internal Repository, Is it Really This Hard?”
问题下的基本设置有一些细节基本上,您可以将Nexus设置为缓存存储库:您的Maven客户端将只访问内部存储库。当内部存储库找不到工件时,它将转到Central(或您定义的任何其他外部存储库),为您提取并存储它以供日后使用。
这很酷,因为如果您想要从依赖于抓取的依赖项 - 您想要的全部免费转换为锁定环境,Nexus可以轻松实现。您将其设置为从中央提取,从干净的计算机运行您的构建(强制Nexus摄取所有当前的Central依赖项),然后关闭代理 - repo功能(因此任何新的/更改的依赖项将由devops管理)。
答案 2 :(得分:4)
您所描述的几乎是大多数存储库管理器的默认配置,包括Archiva。以下是否有助于将其设置为使用Maven?
http://archiva.apache.org/docs/1.3.6/userguide/using-repository.html