Gradle:在ANT任务上设置JVM选项

时间:2014-09-24 22:25:03

标签: ant gradle

我正在使用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.systemProperyant.options.forkOptionsant.forkOptions等的各种事情(我实际上无法在任何地方找到可靠的文档)

我在这里不知所措。 感觉就像我应该说的那样:

task myTask {
  doFirst {
    ant.taskdef(name:      'mytask',
                classname: 'com.blah.Blah',
                classpath: configurations.gen.asPath
               )
    ant.systemProperty 'myProperty', 'blah'
    ant.mytask(foo: 'bar')
  }
}

......但这显然不起作用。

1 个答案:

答案 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
    }
}