2014-09-24 101 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 
    } 
}