2010-11-04 52 views
0

我正在用groovy markupbuilder構建一個ant腳本。不幸的是MarkupBuilder的不允許我創建名爲「目標」(與targetee沒問題)節點, becauase它拋出我如何用groovy markupbuilder創建帶特殊節點名稱的xml文檔

Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.util.LinkedHashMap, BuildGen$_main_closure1_closure5) values: [[name:clean], [email protected]] 
Possible solutions: wait(), any(), trim(), split(), dump(), next() 

所以我的MarkupBuilder裏面這個片段的工作:

targete(name: 'clean') { 
    delete(dir: rootProj.compilerOutput) 
} 

但我想達到同樣與「目標」節點..

我設法創建一個空的「目標」節點是這樣的:

builder.invokeMethod('target', [name: 'clean']) 

但我該如何繼續並在此「目標」節點內放置更多節點?


的工作代碼示例:

def writer = new StringWriter() 
def builder = new groovy.xml.MarkupBuilder(writer) 

builder.project(name: projectName, basedir:'.') { 

    // works with 'target2' but not with 'target' 

    'target2'(name: 'build-subprojects') { 
    rootProj.getAllDependentProjects().each { p-> 
    echo(message: "Compiling project: ${p.projectName}") 
    // some real stuff 
    } 
} 
+0

您可以發佈是不是爲你工作的一些示例代碼?我不確定我明白你的問題是什麼? – 2010-11-04 12:15:52

+0

我在問題中加入了這個問題。希望它使我的問題清楚:-) – jabal 2010-11-04 13:05:25

回答

2

如果我猜的沒錯,你的問題是你想創建屬於Groovy的關鍵字名節點?

如果是這樣,那麼你可以簡單地把在引號,像這樣:

def writer = new StringWriter() 
def builder = new groovy.xml.MarkupBuilder(writer) 

builder.project { 
    'for'(name: 'clean') { 
    delete(dir: '.') 
    } 
} 

println writer 

片斷代碼將打印出:

<project> 
    <for name='clean'> 
    <delete dir='.' /> 
    </for> 
</project> 

對於我來說,這個工程:

def projects = [ 'pro_one', 'pro_two' ] 
def writer = new StringWriter() 
def builder = new groovy.xml.MarkupBuilder(writer) 

builder.project(name: 'test', basedir:'.') { 
    'target'(name: 'build-subprojects') { 
    projects.each { p -> 
     echo(message: "Compiling project: ${p}") 
    } 
    } 
} 

println writer.toString() 

你有target在調用之前設置爲代碼中的任何內容?

你可以嘗試:

builder.target(name: 'build-subprojects') { 

這可能會更好地工作?

我試過的Groovy 1.7.5和1.8 Beta 2和不能讓它失敗: -/

+0

嗨!是的,它可以和'for'這樣的節點名稱一起工作,但'target'則不會。我不知道'目標'有什麼特別的...... :-( – jabal 2010-11-04 12:49:34

+0

加入到我的答案中......也許試着在構建器運行之前打印'target'?另外,你運行的是哪個版本的Groovy? – 2010-11-04 14:09:50

+1

哦,你的問題「在你調用這個函數之前,你的代碼中是否有目標設置?」透露所有:我有一個變量,在其他地方命名,導致了這個問題,即使我把這個單詞放在撇號.builder.target(。 )工作!謝謝! – jabal 2010-11-04 14:22:04

相關問題