:どのように(それらを参照せずに)具体的な種類を必要とするメソッドを呼び出すために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.addDependency(モデル。&addDependency.parameterTypes [0] .newInstance(dep)) – Corrodias
@Corrodias:これは基本的にリフレクションによってそのクラスにアクセスすることを意味しますか?それはうまくいくかもしれませんが、残念ながら、コードがそのメソッドを許可しないJenkinsのGroovy Sandboxで実行されるため、私はそれをテストできません。管理者が承認するまで待たなければなりません。 (おそらく月曜日) – user140547