使用 CURL 下载 Nexus 工件

问题描述 投票:0回答:8

我正在尝试下载使用 CURL 上传到 nexus 的工件。但我无法下载它。从命令提示符执行以下命令不会下载所需的 zip 文件,并且我正在使用 Nexus 管理员帐户

curl -X GET -u userid:pwd "http://nexusserver:8081/nexus/service/local/artifact/maven/redirect?r=Repo_Name&g=GroupID&a=artifactID&v=LATEST&p=zip" -O

我的 URL 格式是否正确?我尝试浏览 URL (http://nexusserver:8081/nexus/service/local/artifact/maven/redirect?r=Repo_Name&g=GroupID&a=artifactID&v=LATEST&p=zip),但收到 HTTP 404 Not found in Nexus存储库管理员。我使用的是 Nexus 版本 3.0.2-02。我是 Nexus 的新手,非常感谢任何帮助。

谢谢

curl nexus
8个回答
21
投票

在较新版本的 Nexus 中,您可以:

  1. 使用curl通过新的REST-API在你的nexus中搜索maven工件
  2. 解析 json-response 以提取下载链接
  3. 使用curl下载神器

在 bash 上这可以归结为:

$ curl -sSL -X GET -G "http://mynexus3.local/service/rest/v1/search/assets" \
  -d repository=maven-snapshots \
  -d maven.groupId=my.group.id \
  -d maven.artifactId=my-artifact \
  -d maven.baseVersion=1.0-SNAPSHOT \
  -d maven.extension=jar \
  -d maven.classifier=jar-with-dependencies \
  | grep -Po '"downloadUrl" : "\K.+(?=",)' \
  | xargs curl -fsSL -o my-artifact.jar

第一个块将搜索您的工件并输出类似的内容

{
  "items" : [ {
    "downloadUrl" : "http://mynexus3.local/repository/maven-snapshots/my/group/id/my-artifact/1.0-SNAPSHOT/my-artifact-1.0-20180821.085657-1-jar-with-dependencies.jar",
    "path" : "/my/group/id/my-artifact/1.0-SNAPSHOT/my-artifact-1.0-20180821.085657-1-jar-with-dependencies.jar",
    "id" : "foo",
    "repository" : "maven-snapshots",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "bar",
      "md5" : "baz"
    }
  } ],
  "continuationToken" : null
}

然后你可以使用 grep 或类似的东西来提取下载 URL。 最后,您再次将提取的 URL 传递给curl 以下载您的工件。 (使用 Nexus 3.13 测试)


9
投票

事实上,Sonatype 明智地决定以一种从 Nexus2 到 Nexus3 完全不兼容的方式更改 REST API - 为了系统管理员的乐趣。因此 /service/local/artifact/maven/ 在 Nexus3 中不再可用。

另一种方法 - 独立于 Nexus 版本 - 是使用 Maven:

mvn -Dmaven.wagon.http.ssl.insecure=true org.apache.maven.plugins:maven-dependency-plugin:3.0.1:copy -Dartifact=mvngroup:mvnartifactid:mvnversion:mvnpackaging -DoutputDirectory=./

其中“mvnpackaging”可以是 jar、war、zip....


9
投票

你可以使用

curl -L -X GET 'https://MY_NEXUS/service/rest/v1/search/assets/download?sort=version&repository=MY-REPO&group=MY_GROUP&name=MY_ARTIFACT_NAME&maven.baseVersion=0.1-SNAPSHOT' --output some.file
与 Nexus 3.

如果需要,添加

-u usr:pw


4
投票

您可以使用以下端点:

GET /service/rest/v1/search/assets/download

执行以下操作:
此端点专门设计用于搜索一项资产,然后将请求重定向到该资产的 downloadUrl

示例:

curl -u admin:admin123 -X GET 'http://localhost:8081/service/rest/v1/search/assets?group=org.osgi&name=org.osgi.core&version=4.3.1&maven.extension=jar&maven.classifier


2
投票

以下声明对我有用。

curl -X GET https://<username>:<password>@<nexusdomain>/repository/<repository name>/<filepath> --output <filename>

例如

curl -X GET https://sampleuser:[email protected]/repository/maven-public/public/util/demo.jar --output demo.jar

1
投票

工件现在位于类似于以下内容的 URL 下:

http://nexusserver:8081/repository/{存储库名称}/

使用它和 Maven 路径的一些知识,您可以获取工件。

也就是说,您正在使用的 URL 还无法正常工作,因为这是我们暂时删除的 REST API 调用。

在较新版本的 Nexus Repository 中,我们开始使用 REST API。如果您至少升级到 3.3(并且升级到 3.5,因为它现已发布),您可以在以下位置访问这项工作的开始部分:

http://nexusserver:8081/swagger-ui/

这是测试版功能,因此可能会发生变化,也就是说,如果您编写了一些内容,并且它在新版本中出现问题,您需要修复它,但您可以查看那里,看看是否有一些端点可以帮助您.

您可能想看一下:http://localhost:8081/swagger-ui/#!/search/search


0
投票

这对我来说效果很好:

curl -L -X GET 'http://YOURNEXUSSERVER:8081/service/rest/v1/search/assets/download?sort=version&repository=YOUREPO&group=YOURGROUP&name=YOURARTIFACTID&maven.extension=war' --output '/d/YOUR /PATH/FILE.war' -u 用户:密码


0
投票

如果有人想知道为什么自 Maven

-Dmaven.wagon.http.ssl.insecure=true
以来
3.9.0
无法忽略 SSL 错误(例如信任存储中丢失),答案是因为他们将传输从 wagon 更改为本机 HTTP,这意味着 wagon 道具没有影响。有关更多信息,请参阅 Maven 文档

您有两种选择,将传输方式更改回

wagon
(将来可能不起作用)或使用新的等效选项
-Daether.connector.https.securityMode=insecure
请参阅此处了解新交通选项的概述。

© www.soinside.com 2019 - 2024. All rights reserved.