java - Artifactory:通过脚本将 Ivy 描述符发布到存储库

标签 java deployment ivy artifactory

有人向我解释过,如果你想让 Artifactory 管理你的存储库(我就是这样做的),并且如果你不想自己手写你自己的 Ivy 描述符(我不这样做),那么你的选项是:

  • 使用 Ivy RoundUp,它除了 Artifactory 本身之外还包含 Ivy 描述符;或
  • 编写一个脚本来为您生成描述符;或
  • 编写 XML 转换以在 Maven 和 Ivy 描述符模式之间进行转换

仔细权衡我的选择后,我决定编写一个 Python 脚本来生成这些描述符。我会将希望部署/安装到存储库的所有 Artifactory 放入 deploy/ 文件夹中,并且脚本将迭代在此文件夹中找到的任何 Artifactory ,向用户查询有关它的信息,然后在脚本内为我执行部署

虽然最后一个要求不是强制性的,但如果脚本能够访问 Artifactory 的 RESTful API 并在正确的位置为我部署描述符和 Artifactory ,那就太好了。

This page解释了 API,这也是我问题的主题。

API 公开的唯一基于 PUT 的操作是:

PUT http://localhost:8080/artifactory/<repo>/<organization>/<module>/<version>/<artifact>:sample-metadata

<xml-metadata-content/>

此操作的说明是:

Attach the XML metadata to an item (file or folder).

这是我正在寻找的吗?例如,如果我有一个名为 my-utils-2.3.jar 的 jar,那么我希望能够将其放在 deploy/ 目录中,让我的脚本不仅生成 my-utils-2.3-ivy.xml,而且将这两个项目部署到我的存储库:正确的位置(在本例中为 http://localhost:8080/artifactory/my-repo/my/utils/2.3/)。

如果这不是我想要的,那么 Artifactory 的 API 是否支持我想要的(相关文档在哪里!)?

而且,如果这是我正在寻找的内容,那么我有第二个与安全相关的问题。我想保证我所有存储库的安全。理想情况下,执行此 Python 脚本的用户必须提供 Artifactory admin 用户名和密码才能成功执行部署。

但是在此操作的定义中我没有看到任何对身份验证的支持!我是否可以假设 Artifactory 不验证 REST 调用?!?

提前致谢!

编辑:
我在 Artifactory/Users 老 nabble 论坛上找到了以下示例:

curl -X PUT -u user:password --data-binary @/absolute/path/my-utils-2.3.jar "http://localhost/artifactory/my-repo/my/utils/2.3/"

这就是我正在寻找的吗?这样,我可以将 PyCurl 用于curl/libcurl 接口(interface),并且仍然实现安全性。如果是这样,那么为什么要求我通过curl而不是Artifactory进行身份验证?

最佳答案

Artifactory 对所有 REST 调用使用 HTTP BASIC 身份验证。您提到的curl示例将不起作用,因为您需要指定文件的完整目标路径(当前命令将仅在Artifactory中(重新)创建目录并忽略文件流)。您应该使用:

curl -XPUT -f -uadmin:password --data-binary @/absolute/path/my-utils-2.3.jar "http://localhost/artifactory/my-repo/my/utils/2.3/my-utils-2.3.jar"

但是,您可以使用 Ivy 通过 IBiblio resolver 直接从第 3 方 Maven 存储库进行解析。 (参见“usepoms”),或者使用convertpom自动将poms转换为ivy描述符。任务。

Artifactory 还允许您在内部应用这种类型的 pom->ivy 转换,并通过基于 groovy 的 user plugin 将 ivy 文件存储到其缓存中。拦截“afterRemoteDownload”事件。

关于java - Artifactory:通过脚本将 Ivy 描述符发布到存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434188/

相关文章:

java - 将文件中的字符串存储在 ArrayList 对象中?

java - 鼠标监听器只有一个实例有效

java - 如何在 mybatis 和 spring boot 中使用一对一映射?

reactjs - 在 github 页面上部署后 Gatsby 链接失败

reactjs - 如何将 next.js 9 部署到 aws lambda

java - 如何在 Gradle 中获取下一个内部版本号

build - Gradle内部使用Ivy吗?

java - 如何以编程方式在android中启用/禁用gps和移动数据?

java - WebSphere 8.5 - 在 Windows 上不停止

eclipse - Grails 依赖项生成失败(ivy、Windows 7)