我想将 Artifact 发布到常春藤存储库,但这不起作用。我阅读了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'
最佳答案
在Groovy中,def
创建一个局部变量,该变量在词法范围内。因此,fileToPublish
在任务 Action 外部不可见。此外,必须在配置阶段完成配置(即,在任务操作中声明和分配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的更多信息。