我按照example进行了尝试,并将其简化为“消息”。
UIImageView
当我运行contentMode
时,我得到了
clipToBounds
我希望它是
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
def extension = project.extensions.create('greeting', GreetingPluginExtension, project)
project.tasks.create('hello', Greeting) {
message = extension.message
}
}
}
class GreetingPluginExtension {
def String message = "aa"
GreetingPluginExtension(Project project) {
message = project.property(String)
}
}
class Greeting extends DefaultTask {
@Input
def String message = project.property(String)
@TaskAction
def testCoverageVerification() {
logger.quiet("Message is")
logger.quiet(message)
}
}
apply plugin: GreetingPlugin
greeting {
message = 'Hi from Gradle'
}
为什么问候语中的字符串无法传入?
答案 0 :(得分:1)
实际上,它很容易解释。在评估扩展块之前,应用并评估插件(因此创建任务和变量值)。因此,即使在设置扩展名的值之前,也会创建任务。从您提供的链接:
构建脚本中的扩展声明以及映射 在扩展属性和自定义任务属性之间发生 Gradle构建生命周期的配置阶段。避免 评估顺序问题,映射属性的实际值必须 在执行阶段得到解决。
要使其工作,您可以将插件声明更改为:
class GreetingPlugin implements Plugin<Project> {
void apply(Project project) {
def extension = project.extensions.create('greeting', GreetingPluginExtension, project)
project.tasks.create('hello', Greeting) {
doFirst {
message = extension.message
}
}
}
}
然而它并没有多大意义 - 所以不要使用它;)
答案 1 :(得分:0)
我设法通过直接从project.greeting.message
@TaskAction
def testCoverageVerification() {
message = project.greeting.message
logger.quiet("Message is")
logger.quiet(message)
}