2016-01-27 55 views
0

是的,我确实需要应用'maven'和'artifactory'插件。但是,有许多现有的Jenkins作业显式调用'uploadArchives'(由maven插件提供)。我想在我自己的插件中重写这个,当'uploadArchives'被使用时强制它调用'artifactoryPublish'。在gradle插件中,如何用artifactory插件'artifactoryPublish'替换Maven插件'uploadArchives'?

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

最后一点需要注意的是,至少要使用Gradle 2.4,因为正在使用gradle包装,并且在一组构建中调用了几个不同版本的gradle。

任何人都有如何完成这个想法?

这是我试过的最新的东西:

project.getTasks()代替( 'uploadArchives',MyTask)

虽然构造函数被调用(由一个println消息验证),任务本身从未被调用过(通过添加一个明确的'throw'语句并且从未看到异常来验证)。

+0

你是否必须重写该任务?补充工作吗? – RaGe

+0

另外,一旦你成功地构建你的插件,你不必再将你的插件添加到数百个build.gradle文件中吗? – RaGe

+0

我不希望任何人使用uploadArchives,但可能有几百个现有的自动作业调用它。所以,如果这些工作能够调用我的东西,而不必更改所有这些工作,那将会很有帮助。至于添加我的插件,这已经完成 - 我只是改变实现。 –

回答

0

只是为了澄清...

我要重写uploadArchives 3个主要原因:

  • 许多现有的工作(以及程序员的手指)与 uploadArchives在编程

  • 我们想要额外的信息artifactoryPublish创建和上传, 特别是如果通过詹金斯插件完成,所以你得到詹金斯作业 号码等

  • 我们不希望任何人使用普通的uploadArchives和发布 没有额外的编译信息。

我终于找到了自己的答案......它不是完全明了,但没有工作,因为我们希望,除了在构建过程中有关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 [跳过]”,而我们不希望有任何混淆。