将工件从多个配置上载到graven in gradle

时间:2012-03-31 16:44:43

标签: maven gradle

我似乎无法使用与uploadArchives不同的单独上传任务将第二组jar发布到本地maven仓库。这是我的设置:

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: project.releaseRepoUrl)
      snapshotRepository(url: project.snapshotRepoUrl)
    }
  }
}

task sourcesJar(type: Jar){ ... }

artifacts{
  archives sourcesJar
}

以上工作符合预期。然后我还有一个configuration

configurations{
  guiceArchives
}

task guiceJar(type: Jar){ ... }

task guiceSourcesJar(type: Jar){ ... }

artifacts{
  guiceArchives guiceJar
  guiceArchives guiceSourcesJar
  //archives guiceJar
  //archives guiceSourcesJar
}

执行gradle uploadArchives正常,但gradle uploadGuiceArchives无效:

:core:guiceClasses UP-TO-DATE
:core:guiceJar UP-TO-DATE
:core:guiceSourcesJar UP-TO-DATE
:core:jar UP-TO-DATE
:core:sourcesJar UP-TO-DATE
:core:uploadArchives

BUILD FINISHED

单个guiceJarguiceSourcesJar任务本身可以正常工作,打印出guiceArchives配置的内容也会发现jars被正确地包含为工件。

我尝试暂时将guiceJarguiceSourcesJar分配给archives配置,这让它抱怨说:

A POM cannot have multiple artifacts with the same type and classifier.

这正是manual says。所以我认为这是造成问题的原因造成的神器冲突。

所以我按照手册的建议使用addFilter修正了它,但效果很好但仅在guiceJarguiceSourcesJar分配给archives时才有效。当我将它们分配回guiceArchives并尝试gradle uploadGuiceArchives时,它仍然无效。

是否无法上传具有不同上传任务的多个工件?

解决方案:

以下是@Peter Niederwieser提供的解决方案的更新。

只需添加:

uploadGuiceArchives {
  repositories {
    mavenDeployer {
      repository(url: project.releaseRepoUrl)
      snapshotRepository(url: project.snapshotRepoUrl)
    }
  }
}

注意:不需要addFilter

谢谢!

EDIT2:

为了完整性,project.releaseRepoUrlproject.snapshotRepoUrl设置为本地maven存储库,如下所示:

project.ext{
  releaseRepoUrl = "file://${project(':').projectDir}/../mvn-repo/releases"
  snapshotRepoUrl = "file://${project(':').projectDir}/../mvn-repo/snapshots"
}

1 个答案:

答案 0 :(得分:2)

可能是因为您没有像uploadGuiceArchives那样为uploadArchives定义存储库吗?