我们正在使用Maven进行大型构建过程(> 100个模块).我们一直将外部依赖项存储在源代码控制中,并使用它来更新本地仓库.
但是,我们已准备好升级到可以缓存中心的本地仓库,这样我们就不必主动下载所有第三方(但我们仍然可以从本地仓库中获取).此外,我们希望从每晚构建中发布我们的内部构建工件,以便开发人员不必构建世界.
我们正在考虑Nexus和Artifactory.优先选择其中一个的原因是什么?我们应该考虑其他人吗?
Nexus和Maven有什么区别?
仅使用Maven的基本方案是什么?那个只考虑Nexus的场景怎么样?当我想要同时使用它们时它看起来如何?
我正在试图弄清楚如何组织许多(大约50多个)maven2项目,以便他们可以部署到一个中央nexus存储库.在使用mvn deploy
目标时,需要在distributionManagement标记中指定目标,如下所示:
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
现在,我不希望每个pom.xml(50+以上)一遍又一遍地包含这个块.我的第一个虽然是settings.xml
文件,但似乎不可能(按设计)在那里定义它.那么,第一个问题是,为什么会这样呢?如果有可能我可以在maven2发行版的settings.xml中指定它,它可以分发给所有开发人员.
我发现唯一可行的解决方案是创建一个组织范围的master-pom项目,它确实包含这些设置,并使所有其他pom.xml依赖于这个master-pom via <parent>
标签.但这在多模块构建中看起来很奇怪:
- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
- Project 1 module pom (with pm as parent)
- Project 2 module pom (with pm as parent)
Run Code Online (Sandbox Code Playgroud)
通常我在所有文档中都读到模块poms应该使用父pom,而不是一些不同的pom.但在阅读了关于继承诉聚合的maven网站之后,我们写道它确实是可能的.
我发现的一个问题是maven网站生成,这似乎有这个设置的问题(模块如果没有直接的反向引用就无法正确链接)
那么,这是一种有效的方法吗?问题的任何其他更明显,更简单的解决方案?
我有一个非Java项目,它生成一个版本化的构建工件,我想将它上传到Nexus存储库.因为项目不是Java,所以它不使用Maven进行构建.我宁愿不介绍Maven/POM文件只是为了让文件进入Nexus.
博客上的Nexus REST API链接最终都在登录墙上,没有"创建用户"链接,我可以看到.
那么,在没有Maven的情况下,将构建工件上传到Nexus存储库的最佳(或任何合理)方法是什么?"bash + curl"会很棒,甚至是Python脚本.
快照存储库和发布存储库之间有什么区别?
这是关于设置存储库(如Artifactory,Nexus等)
我在Nexus服务器的自己的存储库中部署工件时遇到错误:"无法部署工件:无法传输工件""无法传输文件http:/// my_artifact.返回代码为:400"
我让Nexus运行了一个自定义存储库my_repo和下一个maven本地配置:
的settings.xml
<server>
<id>my_repo</id>
<username>user</username>
<password>pass</password>
</server>
...
<mirror>
<id>my_repo</id>
<name>Repo Mirror</name>
<url><my_url_to_my_repo></url>
<mirrorOf>*</mirrorOf>
</mirror>
Run Code Online (Sandbox Code Playgroud)
的pom.xml
<distributionManagement>
<repository>
<id>my_repo</id>
<name>my_repo</name>
<url><my_url_to_my_repo></url>
<layout>default</layout>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshots</name>
<url><my_url_to_my_snapshot_repo></url>
</snapshotRepository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
然后我执行
mvn deploy
Run Code Online (Sandbox Code Playgroud)
并得到错误.任何的想法?
我有一个sbt(Scala)项目,目前从Web上提取工件.我们希望转向一个可以缓存工件的企业标准化Nexus存储库.从Nexus文档中,我了解如何为Maven项目执行此操作.但是sbt显然使用了不同的方法.(我知道Ivy会以某种方式参与其中,但我从未使用它,也不了解它是如何工作的.)
如何告诉sbt和/或底层Ivy将所有依赖项用于企业Nexus存储库系统?我想要使用某种项目级配置文件的答案,以便我们的源存储库的新克隆将自动使用代理.(即,在点目录中使用每个用户的配置文件捣乱是不可行的.)
谢谢!
安装Nexus Repository Manager OSS 3后,我看不到Artifact Upload
通过网页上传工件的选项.
在Nexus Repository Manager OSS 2.13中,可以选择执行该操作.
任何人都可以告诉我如何将工件上传到Nexus 3中的托管存储库?
编辑:从3.9.0版本,实现此功能.
我们正在使用hudson上的maven发布插件并尝试自动执行发布过程.发布:准备工作正常.当我们尝试执行release:perform时,它会失败,因为它会尝试将源工件两次上传到存储库.
我试过的东西,
它仍然吐出这个错误.
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Checking for pre-existing User-Agent configuration.
[INFO] [DEBUG] Adding User-Agent configuration.
[INFO] [DEBUG] not adding permissions to wagon connection
[INFO] Uploading: http://xx.xx.xx.xx:8081/nexus/content/repositories/releases//com/yyy/xxx/hhh/hhh-hhh/1.9.40/hhh-hhh-1.9.40-sources.jar
[INFO] 57K uploaded (xxx-xxx-1.9.40-sources.jar)
[INFO] [DEBUG] Using Wagon implementation lightweight from default mapping for protocol http
[INFO] [DEBUG] Using Wagon implementation lightweight from default …
Run Code Online (Sandbox Code Playgroud) 我正在使用Gitlab,Jenkins和 - 可能 - Nexus构建一个工作流程(我需要一个工件存储).我想让GitLab存储版本/二进制文件 - 是否可以方便地进行存储?
我不希望有另一个服务可以从中下载发行版(和文档)但是以某种方式与存储库管理器集成,就像在GitHub中处理发布一样.有线索吗?