gradle 文件创建后的发布

gradle publications after file created

我正在尝试在我的项目中使用 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
  }
}

但好像publishing.publications是在读取构造中的信息,而不是等待任务完成文件的创建。 无法告诉 publishing.publications 等到另一个任务完成其操作之后。

我遇到的问题是,如果 createFile 任务是 运行

,我只想发布这个人工制品
gradle createFile     --> publish to artifactory
gradle someothertask  --> don't publish

问题是,当我 运行 gradle 其他任务 然后文件 /tmp/file.xml 不存在,并且 artifactoryPublish 失败,因为它找不到该文件。 我也不想 artifactoryPublish.dependsOn createFile 因为每次都会使 createFile 运行。

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

artifactoryPublish.dependsOn('createFile')

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

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

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

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