我们正在使用Nexus来部署我们的快照工件.我们的构建服务器使用以下命令在每次构建期间部署它们:mvn deploy.作为每个构建的结果,部署了较新版本的工件.已经将大量工件部署到存储库的问题当然我们只需要最后一个工件.有没有办法限制Nexus中部署的快照工件的数量?谢谢你的帮助,迈克尔
我的云服务器位于世界各地的不同数据中心.每个数据中心都与其他数据中心分开.
我正在寻找一种简单的方法,可以轻松,一致地在每个区域中将工件部署到各个服务器集群(可能运行不同版本的软件,即开发,测试和生产集群).在我看来,工件服务器是我需要的,因为我可以在云服务器上执行安装脚本,从而下载正确的软件工件.
现在,我在运营方面工作.我不关心做构建或管理软件构建依赖性.我只想要一个工件服务器,我可以存储我的所有不同版本的软件包,以便以后访问.踢球者,我有几种不同类型的工件要存储.
Nexus或Artifactory可以管理所有这些类型的包,还是我应该朝不同的方向寻找?我不反对将make文件添加到我的shell脚本项目中,这些项目只生成tar.gz文件.我只是不想走下设置工件库的道路,最终,一个小脚本,wget和一个apache服务器可以正常工作.
我正在尝试为我们的团队建立一个私人远程存储库.现在存储库提供以下服务,到目前为止我已经尝试过 -
当发出' 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
用户/专家可以告诉我是否可以在上一节中实现这些目标?
nexus书:http://www.sonatype.com/books/nexus-book/reference/.似乎没有花时间考虑如何备份nexus存储库.如果我正在安装我的快照并将其发布到本地存储库中,那么我可能需要备份它.但是,我真的不想备份任何可以从远程存储库轻松下载的内容.
一些谷歌搜索似乎也没有透露规范的答案,所以也许后人可以在这里记录.
谢谢,内森
如何配置maven项目以将快照和发布部署到Nexus?
<distributionManagement>
<repository>
<id>InternalReleases</id>
<name>Internal Releases</name>
<url>http://192.168.16.232:8081/nexus/content/repositories/releases/</url>
</repository>
<repository>
<id>InternalSnapshots</id>
<name>Internal Snapshots</name>
<url>http://192.168.16.232:8081/nexus/content/repositories/snapshots/</url>
</repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)
此配置在Eclipse 3.8中使用m2e 1.2创建错误
Project build error: Non-parseable POM D:\Workspaces\W\Parent\pom.xml: Duplicated tag: 'repository' (position: START_TAG
seen ...
Run Code Online (Sandbox Code Playgroud)
当pom的版本以-SNAPSHOT为后缀并在RELEASE时部署到InternalReleases存储库时,我希望将工件部署到InternalSnapshots存储库.这应该使用相同的pom.xml文件并执行相同的mvn deploy
命令.
上下文
我的.npmrc
文件似乎被正确读取(npm config ls -l
从命令行和Maven构建中检查).
npm
运行的机器无法直接连接到网络,它只能连接到Nexus npm注册表网址.因此,代理属性proxy
和https-proxy
未设置.
由于对Nexus的访问受到限制,我已在Nexus中生成了访问令牌.
Nexus安全令牌由用户名和密码组成,两者都包含/
通常必须"url编码"的字符
正如预期的那样,使用此配置时,运行时npm install
检测不到代理.
Nexus npm注册表代理似乎设置正确(我可以使用生成的令牌连接后使用Web浏览器访问json
文件和下载tgz
文件)
如果我设置registry
到http://registry.npmjs.org/
和评论_auth
,email
,always-auth
,strict-ssl
性能,并添加proxy
和https-proxy
配置,npm install
按预期工作(但我无法做到这一点的目标环境)
.npmrc
文件内容
; Nexus proxy registry pointing to http://registry.npmjs.org/
registry = https://<host>/nexus/content/repositories/npmjs-registry/
; base64 encoded authentication token
_auth = <see question below>
; required by Nexus
email = <valid email> …
Run Code Online (Sandbox Code Playgroud) 快速解决
所需的凭证需要nexus定义的确切领域.请参阅下文,了解如何找到您定义的那个,但肯定是"Sonatype Nexus Repository Manager".正常情况下,将其余详细信息添加到凭据.
C:/data/user/.sbt/.credentials
realm=Sonatype Nexus Repository Manager
host=nexus
user=repouser
password=password
Run Code Online (Sandbox Code Playgroud)
build.sbt credentials + = Credentials(Path.userHome /".sbt"/".credentials")
publishTo <<= version { v: String =>
val nexus = "http://nexus/"
if (v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "content/repositories/libs-snapshots")
else
Some("releases" at nexus + "content/repositories/libs-releases")
}
Run Code Online (Sandbox Code Playgroud)
问题
我正在尝试将jar发布到公司的nexus repo中.
我可以从Maven做到这一点,并且我已经配置了存储库以便能够使用Nexus提供内部jar.但是,由于授权,发布失败.
> publish
[info] Packaging c:\app\target\scala-2.10\app_2.10-0.1-sources.jar ...
[info] Wrote D:\app\target\scala-2.10\app_2.10-0.1.pom
[info] :: delivering :: com.app#app_2.10;0.1 :: 0.1 :: release :: Tue May 07 18:28:44 BST 2013
[info] Done packaging.
[info] delivering ivy file …
Run Code Online (Sandbox Code Playgroud) 当我mvn release:perform
在父POM上执行时,服务器正在响应有关其中一个子项目(文件名已编辑)的错误:
[错误]无法在项目上执行目标org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file(default-cli):无法部署工件:无法将工件从/向存储库传输:无法转移文件.返回码为:400,ReasonPhrase:错误请求.
但是,此子项目的所有文件都已成功上载!我看到一个新目录(以发行版本号命名),它包含了人们所期望的所有.jar,.pom,.md5和.sha1文件.
我无法访问Nexus服务器,但我想知道是什么原因造成的,以及如何解决它.是否有可能Maven试图两次上传这个特定的子项目?如果是这样,为什么Maven会这样做,我怎么能阻止它呢?
更新:如果你有同样的问题,请与最upvotes答案这个职位.我跑了mvn help:effective-pom
,发现有问题的项目实际上有两次部署阶段的执行.删除其中一个执行解决了我的问题.
我使用maven插件成功地将我的罐子上传到nexus存储库,但它没有上传源代码.这是我的配置:
uploadArchives {
repositories{
mavenDeployer {
repository(url: "http://...") {
authentication(userName: "user", password: "myPassword")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我搜索并发现我可以通过添加新任务来添加源.
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我认为必须有一个更好的解决方案,通过配置maven插件,像uploadSource = true这样:
uploadArchives {
repositories{
mavenDeployer {
repository(url: "http://...") {
authentication(userName: "user", password: "myPassword")
}
uploadSources = true
}
}
}
Run Code Online (Sandbox Code Playgroud) nexus ×10
maven ×5
java ×3
artifacts ×2
deployment ×2
maven-2 ×2
archiva ×1
artifactory ×1
backup ×1
gradle ×1
ivy ×1
npm ×1
npm-install ×1
repository ×1
sbt ×1
scala ×1
settings ×1