2014-09-24 76 views
4

我使用的摇篮2.1设置JVM选项,并有一个Ant任务定义是这样的:摇篮:上一个Ant任务

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

有我需要传递给com.blah.Blah为JVM属性(因为,这个ANT任务的创建者已经决定系统属性是传递信息的合理方式),而不是像参数那样传递参数值。我已经尝试了很多事情,包括:

  • 设置上的所有任务的systemPropertyJavaForkOptions

    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') 
    } 
} 

...但是,这显然是行不通的。

+0

您能否提供关于此特定ant任务的更多信息?当使用'gradle -Dprop = value'执行我的构建时,我能够通过'log(System.getProperty(“prop”),Project.MSG_WARN)'简单地输出给定系统属性的任务成功运行简单测试。 – 2014-09-25 00:39:09

+0

@MarkVieira:这真的不相关。当然,我可以肯定地告诉用户使用我的项目始终用'-Dprop = value'标志运行'gradle',但这并不能解决构建系统缺乏在构建系统中指定某些内容的问题。 – 2014-09-26 03:10:49

+0

我想也许我很困惑。你的帖子使它看起来好像'-D'方法不起作用。如果你唯一的问题是你不想指定一个命令行参数,你可以把系统属性放在'gradle.properties'文件中。只需以“systemProp”开头。例如:'systemProp.prop = value'。 – 2014-09-26 14:43:41

回答

2

在摇篮你可以使用Groovy所以没有什么阻止你编程设置系统属性,如下图所示:

task myTask { 
    doFirst { 
     System.setProperty('myProperty', 'blah') 
     // Use AntBuilder 
     System.clearProperty('myProperty') 
    } 
} 

记住摇篮的AntBuilder在用于摇篮同一进程执行蚂蚁逻辑。因此,设置系统属性将可用于您构建中的其他任务。当两个任务使用相同的系统属性(取决于执行顺序)或者并行运行构建时,这可能会产生副作用。

相反,您可能需要将Ant任务更改为使用Ant属性来驱动您的逻辑(如果这甚至是选项)。蚂蚁属性可以从Gradle中设置为:

task myTask { 
    doFirst { 
     ant.properties.myProperty = 'blah' 
     // Use AntBuilder 
    } 
}