给出以下代码:
def model = readMavenPom file: 'pom.xml'
dep = [
groupId : "org.foo",
artifactId : "bar",
version : "1.0" ]
model.addDependency(dep)
这给出了错误
Caught:groovy.lang.MissingMethodException:没有方法签名:org.apache.maven.model.Model.addDependency()适用于参数类型:(java.util.LinkedHashMap)值:[[groupId:org。 foo,artifactId:bar,version:1.0]]
现在可以做到
model.addDependency(dep as Dependency)
引用课程时。它没有问题。本地。
不幸的是,我必须在Jenkins上执行它,我遇到了这个issue。所以基本上,如果我引用Dependency
类,我会遇到一些类加载问题。建议使用"动态类型"。
因此可以在不引用该类的情况下调用addDependency
吗?
答案 0 :(得分:1)
问题是加载Model类的类加载器(让它调用它" A")与脚本在引用Dependency类时尝试使用的类加载器不同( " B&#34)。因此,您可以使用类加载器-B创建依赖关系-B,但模型-A需要依赖关系-A。
我们可以使用反射来获取对Dependency-A类的引用,然后使用相同的属性映射创建它的实例,如下所示:
def model = readMavenPom file: 'pom.xml'
dep = [
groupId : "org.foo",
artifactId : "bar",
version : "1.0" ]
model.addDependency(model.&addDependency.parameterTypes[0].newInstance(dep))
在Groovy中,& addDependency是一个方法引用,反射样式。我们肯定知道只有一个方法只有一个参数,它只有一个参数,所以我们只取第一个参数的类并调用newInstance,它的工作方式与"相同。作为"关键字会有。