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

Gradle:在ANT任务上设置JVM选项,ant,gradle,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') } } 我需要将一个属性作

我使用的是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任务的创建者没有像传递参数值这样做,而是认为系统属性是传递信息的合理方式)。我尝试了很多方法,包括:

  • 使用
    JavaForkOptions
    在所有任务上设置
    systemProperty

    tasks.withType(JavaForkOptions) {
      systemProperty 'myproperty', 'blah'
    }
    
  • 调用
    gradle
    时传递
    -Dmyproperty=blah
  • 涉及到
    ant.systemproperty
    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')
  }
}

…但这显然不起作用。

在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
    }
}

你能提供一些关于这个特殊蚂蚁任务的更多信息吗?当使用
gradle-Dprop=value
@MarkVieira执行构建时,我能够成功地运行一个简单的测试任务,该任务只需通过
log(system.getProperty(“prop”),Project.MSG\u WARN)
输出一个给定的系统属性。当然,我当然可以告诉使用我的项目的人总是使用
-Dprop=value
标志运行
gradle
,但这并不能解决构建系统缺乏在构建系统中指定某些内容的能力的问题。我想我可能是糊涂了。你的帖子让人觉得
-D
方法不起作用。如果您唯一的问题是不想指定命令行参数,则可以将系统属性放置在
gradle.properties
文件中。只需在它们前面加上“systemProp”。例如:
systemProp.prop=value