我正在使用Gradle 2.1并且有一个ANT任务定义如下:
task myTask {
doFirst {
ant.taskdef(name: 'mytask',
classname: 'com.blah.Blah',
classpath: configurations.gen.asPath
)
ant.mytask(foo: 'bar')
}
}
Run Code Online (Sandbox Code Playgroud)
有一个属性我需要传递给com.blah.Blah
作为JVM参数(因为,这个ANT任务的创建者决定系统属性是传递信息的合理方式,而不是像在参数中传递参数值那样理智.我尝试了很多东西,包括:
使用以下命令设置systemProperty
所有任务JavaForkOptions
:
tasks.withType(JavaForkOptions) {
systemProperty 'myproperty', 'blah'
}
Run Code Online (Sandbox Code Playgroud)-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')
}
}
Run Code Online (Sandbox Code Playgroud)
......但这显然不起作用.
在 Gradle 中,您可以使用 Groovy,因此不会阻止您以编程方式设置系统属性,如下所示:
task myTask {
doFirst {
System.setProperty('myProperty', 'blah')
// Use AntBuilder
System.clearProperty('myProperty')
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,Gradle 的 AntBuilder 在与 Gradle 使用的同一进程中执行 Ant 逻辑。因此,设置系统属性将可用于构建中的其他任务。当两个任务使用相同的系统属性(取决于执行顺序)或者并行运行构建时,这可能会产生副作用。
相反,您可能希望更改 Ant 任务以使用 Ant 属性来驱动逻辑(如果这甚至是一个选项)。Ant 属性可以从 Gradle 中设置,如下所示:
task myTask {
doFirst {
ant.properties.myProperty = 'blah'
// Use AntBuilder
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1654 次 |
最近记录: |