【问题标题】:gradle publications after file created创建文件后的 gradle 出版物
【发布时间】:2016-03-14 18:12:11
【问题描述】:

我正在尝试在我的项目中使用 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 someothertask 那么文件 /tmp/file.xml 不存在,并且 artifactoryPublish 失败,因为它找不到文件。 我也不想拥有 artifactoryPublish.dependsOn createFile 因为这使得 createFile 每次都运行。

【问题讨论】:

  • 为什么运行其他任务会使 artifactoryPublish 运行?

标签: gradle artifactory


【解决方案1】:

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

artifactoryPublish.dependsOn('createFile')

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

【讨论】:

  • 啊。我错过了关键的一点。我只希望 artifactoryPublish 在其他任务运行时运行。我会更新问题
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多