创建文件后的gradle发布

时间:2016-03-14 18:12:11

标签: gradle artifactory

我试图在我的项目中使用artifactoryPublish。

我想将一个xml文件发布到artifactory,发现我可以愉快地将以下内容添加到gradle中

publishing.publications {

    filexml(MavenPublication) {
        artifact "/tmp/file.xml"
        setArtifactId('file.xml')
        version 1
        groupId 'mygroup.test'
    }
}
artifactoryPublish {
   publications ('filexml')      
}

这很好..如果/tmp/file.xml存在。

但是,如果文件不存在,则会失败..

但是我有一个任务,其中一个动作将创建文件

类似

task createFile {

  doLast {
   do.work.to.create.file
  }
}

但似乎publish.publications正在读取构造中的信息,而不是等待任务完成文件的创建。 没有办法告诉publishing.publications等到其他任务完成其动作之后。

我遇到的问题是,如果运行createFile任务,我只想发布这个神器项

gradle createFile     --> publish to artifactory
gradle someothertask  --> don't publish
问题是,当我运行gradle someothertask时 然后文件/tmp/file.xml不存在,artifactoryPublish失败,因为它无法找到该文件。 我也不想拥有artifactoryPublish.dependsOn createFile 因为这样每次都会运行createFile。

2 个答案:

答案 0 :(得分:0)

您可以在gradle中添加任务依赖项。如果你添加:

artifactoryPublish.dependsOn('createFile')

到build.gradle的根级别,它将确保在执行artifactoryPublish之前始终调用createFile任务,如果我正确地阅读您的问题,将确保在调用发布之前该文件始终可用。

答案 1 :(得分:0)

所以我发现解决这个问题的唯一方法是为我们正在创建的工件创建一个子项目,

然后在artifactoryPublish中你可以添加一个ifOnly部分,它禁用这个子项目中的所有工件

artifactoryPublish {
  //
  ifOnly { file("...").exists() }
}