【问题标题】:Gradle : Get all files in a dependency from maven repositoryGradle:从 maven 存储库中获取依赖项中的所有文件
【发布时间】:2015-10-17 23:21:03
【问题描述】:

我想将依赖项中可用的所有文件添加到我的工件中,以便我可以将该依赖项上传到另一个 Nexus 存储库。

我的依赖项包含 15 个文件,存储在我的 Nexus 存储库中的同一 GAV 下:

myproject.jar
myproject.jar.md5
myproject.jar.sha1

myproject-sources.jar
myproject-sources.jar.md5
myproject-sources.jar.sha1

myproject.tgz
myproject.tgz.md5
myproject.tgz.sha1

myproject.pom
myproject.pom.md5
myproject.pom.sha1

maven-metadata.xml
maven-metadata.xml.md5
maven-metadata.xml.sha1

-sources.jarfile 有一个<classifier>sources</classifier>property,tgz 和 pom 文件有一个<extension>property,其他没有什么特别的。

问题是我希望尽可能避免硬编码,以便能够仅将 GAV 参数传递给我的脚本,并且它可以自行处理任何 GAV 的所有获取和释放,无论文件是什么可用。

我现在正在研究的解决方案是直接查询 Nexus 存储库以获取带有如下 URL 的文件列表:

http://mynexushost:8081/nexus/service/local/repositories/snapshots/content/${group}/${artifact}/${version}/

这会向我发送一个 JSON(接受标头设置为 application/json),其中包含我需要检索所有可用文件、下载它们并将它们添加到我的工件中,然后将其上传到我的目标存储库的 URL 和内容。

我很确定这个解决方案有效,但它绝对不是“Gradle 方式”,因为它将我与 Nexus 联系在一起并且不使用内置的 maven 依赖解析实用程序。

如何在不查询 Nexus API 的情况下解决这个问题?

【问题讨论】:

  • 你能声明一个 Gradle 依赖吗?为什么需要获取所有特定文件?
  • 我想在另一个 Nexus 存储库中重现相同的 GAV。也许我不需要一一指定所有文件,但是使用默认的 gradle 方式处理依赖关系我只得到myproject.jarfile。而且我不想在我的部署脚本中硬编码扩展,我想让它保持通用。
  • 是的,这就是我想做的。但是,这只支持部署我的工件中列出的文件,所以我必须在某个地方下载它们。并且使用依赖项来下载文件不允许我下载所有必需的文件。这是实际存在的过程,它适用于只有一个 jar 的依赖项,但不适用于像我在示例中给出的那样具有更多文件的依赖项。
  • @Johnride 你有没有想过这个问题?

标签: maven gradle nexus


【解决方案1】:

我创建了一个名为 Maven Repository Provisioner 的工具,它几乎可以完成此任务。你可以在https://github.com/simpligility/maven-repository-tools查看它

它在生产中完全用于您想要的目的,但它还计算和提供所有传递依赖项和所需的父 pom。检查一下,如果它没有完全满足您的要求...我接受拉取请求 ;-)

【讨论】:

  • 听起来不错,问题是我想运行一个 gradle 脚本来执行此操作,因为我所有的构建和部署都是用 gradle 构建的。再加上我能够自己创建一个。可悲的是,当我为客户开发它时,我无法开源它。不过感谢您的回答。
  • 你可以在我的工具周围包装一个 gradle 插件。事实上,我打算在以后为它做一个 Maven 插件。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2017-01-23
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
相关资源
最近更新 更多