我想将工件发布到ivy存储库但它不起作用。我读了this article并在阅读之后创建了这个示例构建:
task ivyPublishTest << {
def buildDir = new File("build")
buildDir.mkdirs()
def fileToPublish = new File("build/file.abc")
fileToPublish.write("asdasdasd")
}
artifacts {
archives(ivyPublishTest.fileToPublish) {
name 'gradle-test-artifact'
builtBy ivyPublishTest
}
}
uploadArchives {
repositories {
ivy {
url "http://my.ivy.repo/ivyrep/shared"
}
}
}
当然问题是它不起作用。我收到此错误Could not find property 'fileToPublish' on task ':ivyPublishTest'
答案 0 :(得分:1)
在Groovy中,def
创建一个局部变量,它是词法范围的。因此,fileToPublish
在任务操作之外不可见。此外,必须在配置阶段中完成配置(即,任务操作中fileToPublish
的声明和分配将来得太晚)。这是一个正确的解决方案:
task ivyPublishTest {
// configuration (always evaluated)
def buildDir = new File("build")
ext.fileToPublish = new File("build/file.abc")
doLast {
// execution (only evaluated if and when the task executes)
buildDir.mkdirs()
fileToPublish.write("asdasdasd")
}
}
artifacts {
// configuration (always evaluated)
archives(ivyPublishTest.fileToPublish) {
name 'gradle-test-artifact'
builtBy ivyPublishTest
}
}
ext.fileToPublish = ...
声明了一个额外属性,这是一个附加到现有对象的新属性,该对象在对象(本例中的任务)可见的任何地方都可见。您可以在here中了解有关额外属性Gradle User Guide的更多信息。