我正在使用Gradle 2.1,并且ANT任务定义如下:
task myTask {
doFirst {
ant.taskdef(name: 'mytask',
classname: 'com.blah.Blah',
classpath: configurations.gen.asPath
)
ant.mytask(foo: 'bar')
}
}
我需要将一个属性作为JVM参数传递给com.blah.Blah
(因为这个ANT任务的创建者决定系统属性不是像在参数中传递参数值那样理智。一种合理的信息传递方式)。我尝试过很多东西,包括:
使用systemProperty
:
JavaForkOptions
tasks.withType(JavaForkOptions) {
systemProperty 'myproperty', 'blah'
}
-Dmyproperty=blah
时传递gradle
。ant.systemPropery
,ant.options.forkOptions
,ant.forkOptions
等的各种事情(我实际上无法在任何地方找到可靠的文档)我在这里不知所措。 感觉就像我应该说的那样:
task myTask {
doFirst {
ant.taskdef(name: 'mytask',
classname: 'com.blah.Blah',
classpath: configurations.gen.asPath
)
ant.systemProperty 'myProperty', 'blah'
ant.mytask(foo: 'bar')
}
}
......但这显然不起作用。
答案 0 :(得分:2)
在Gradle中,您可以使用Groovy,因此没有什么可以阻止您以编程方式设置系统属性,如下所示:
task myTask {
doFirst {
System.setProperty('myProperty', 'blah')
// Use AntBuilder
System.clearProperty('myProperty')
}
}
请记住,Gradle的AntBuilder在与Gradle相同的过程中执行Ant逻辑。因此,设置系统属性将可用于构建中的其他任务。当两个任务使用相同的系统属性(取决于执行顺序)或者并行运行构建时,这可能会产生副作用。
相反,您可能希望更改Ant任务以使用Ant属性来驱动逻辑(如果这甚至是一个选项)。可以从Gradle中设置Ant属性:
task myTask {
doFirst {
ant.properties.myProperty = 'blah'
// Use AntBuilder
}
}