考慮下面的代碼的方法(沒有引用它們):如何使用Groovy動態對象調用需要具體類型
def model = readMavenPom file: 'pom.xml'
dep = [
groupId : "org.foo",
artifactId : "bar",
version : "1.0" ]
我想打電話給Model.addDependency
model.addDependency(dep)
這給了錯誤
抓住:groovy.lang.MissingMethodException:沒有方法的簽名:org.apache.maven.model.Model.addDependency()是appli電纜參數類型:(java.util.LinkedHashMap中)的值:[[的groupId:org.foo,artifactId的:巴,版本:1.0]]
現在可以做到
model.addDependency(dep as Dependency)
引用類時。它工作沒有問題。本地。
不幸的是,我必須執行對詹金斯,和我遇到了這個issue。所以基本上,如果我參考Dependency
類,我遇到了一些類加載問題。有建議使用「動態打字」。
因此,它是可以調用addDependency
沒有引用這門課嗎?
這似乎是不可能的。您需要創建一個'Dependency'對象或將一個'Map'實例投射到它。 – Opal
我想不出一個簡單的方法來測試這個,但試試這個。如果它有效,我會將它轉換成答案。如果運氣好的話,parameterTypes會把從Model的類加載器中解析出來的Class取出來,而不是腳本自己。 > model.addDependency(模型&addDependency.parameterTypes [0] .newInstance(DEP)) – Corrodias
@Corrodias:因此,這基本上意味着通過反射來訪問該類別?它可能工作,但不幸的是我現在無法測試,因爲代碼在Jenkins的常規沙箱中運行,不允許使用這些方法,所以我必須等到它被管理員批准爲止。 (也許在星期一) – user140547