【问题标题】:In a gradle plugin, how do I replace maven plugin 'uploadArchives' with artifactory plugin 'artifactoryPublish'?在 gradle 插件中,如何将 maven 插件 'uploadArchives' 替换为 artifactory 插件 'artifactoryPublish'?
【发布时间】:2016-01-27 21:53:14
【问题描述】:

是的,我确实需要同时应用“maven”和“artifactory”插件。但是,有许多现有的 Jenkins 作业明确调用“uploadArchives”(由 maven 插件提供)。我想在我自己的插件中覆盖它,以在使用“uploadArchives”时强制它调用“artifactoryPublish”。

我想在我的插件中以编程方式执行此操作,而不是更改数百个 build.gradle 文件,并且到目前为止我已经尝试了我能想到的所有调用组合,但没有运气。

最后一个警告是,这必须至少回到 Gradle 2.4,因为正在使用 gradle 包装器,并且在一组构建中调用了几个不同版本的 gradle。

有人知道如何实现这一点吗?

这是我尝试的最新方法:

project.getTasks().replace('uploadArchives', MyTask)

虽然构造函数被调用(通过 println 消息验证),但任务本身从未被调用(通过添加显式“throw”语句验证并且从未看到异常)。

【问题讨论】:

  • 你一定要覆盖任务吗?补充剂会起作用吗?
  • 另外,一旦你成功构建了你的插件,你是不是必须将你的插件添加到数百个 build.gradle 文件中?
  • 我不希望任何人再使用uploadArchives,但可能有几百个现有的自动化工作调用它。因此,如果这些工作改为调用我的东西,而不必更改所有这些工作,那将会很有帮助。至于添加我的插件,这已经完成了——我只是在改变实现。

标签: plugins gradle


【解决方案1】:

只是为了澄清......

我想覆盖 uploadArchives 有 3 个主要原因:

  • 许多现有的工作(以及程序员的手指) 上传已编入的档案。

  • 我们想要 artifactoryPublish 创建和上传的额外信息, 特别是如果通过 Jenkins 插件完成,那么您将获得 Jenkins 工作 号码等。

  • 我们不希望任何人使用普通的上传存档和发布 没有额外的构建信息。

我自己终于找到了答案...这并不完全简单,但确实可以按我们的意愿工作,除了在构建期间有关 uploadArchives 的额外输出行。

    project.plugins.apply('com.jfrog.artifactory')
    project.getTasks().create([name: 'uploadArchives', type: MyOverrideTask, overwrite: true, dependsOn: ['artifactoryPublish'] as String[], group: 'Upload'])

是的,我可以在使其依赖于 artifactoryPublish 之后禁用 uploadArchives,但是在构建过程中,它不仅打印了“uploadArchives”,还打印了“uploadArchives [Skipped]”,我们不希望有任何混乱。

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 2015-03-15
    • 2017-06-25
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多