i'm trying generate pom custom artifact groovy class using following code:
def outputbuilder = new streamingmarkupbuilder() list<artifact> artifacts = [] artifacts << new artifact(groupid: "g", artifactid: "a", version: "v") artifacts << new artifact(groupid: "g1", artifactid: "a1", version: "v1") def pom = { project() { modelversion("4.0.0") groupid("gi") artifactid("ai") version("007") packaging("pom") dependencymanagement() { out << artifacts.each { dependency { groupid(it.groupid) } } } } } println outputbuilder.bind(pom) } running simple example yields error:
exception in thread "main" groovy.lang.groovyruntimeexception: namespace prefix: groupid not bound uri @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:39) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:27) @ java.lang.reflect.constructor.newinstance(constructor.java:513) @ org.codehaus.groovy.reflection.cachedconstructor.invoke(cachedconstructor.java:77) @ org.codehaus.groovy.reflection.cachedconstructor.doconstructorinvoke(cachedconstructor.java:71) @ org.codehaus.groovy.runtime.callsite.constructorsite$constructorsitenounwrap.callconstructor(constructorsite.java:81) @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcallconstructor(callsitearray.java:57) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callconstructor(abstractcallsite.java:182) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callconstructor(abstractcallsite.java:190) @ groovy.xml.streamingmarkupbuilder$_closure6.docall(streamingmarkupbuilder.groovy:130) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ org.codehaus.groovy.reflection.cachedmethod.invoke(cachedmethod.java:90) @ groovy.lang.metamethod.domethodinvoke(metamethod.java:233) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:272) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.closure.call(closure.java:411) @ groovy.xml.streamingmarkupsupport.basemarkupbuilder$document.invokemethod(basemarkupbuilder.java:148) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:423) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:730) @ groovy.lang.groovyobjectsupport.invokemethod(groovyobjectsupport.java:44) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokeondelegationobjects(closuremetaclass.java:407) @ org.codehaus.groovy.runtime.metaclass.closuremetaclass.invokemethod(closuremetaclass.java:346) @ groovy.lang.metaclassimpl.invokemethod(metaclassimpl.java:909) @ org.codehaus.groovy.runtime.callsite.pogometaclasssite.callcurrent(pogometaclasssite.java:66) @ org.codehaus.groovy.runtime.callsite.callsitearray.defaultcallcurrent(callsitearray.java:49) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callcurrent(abstractcallsite.java:133) @ org.codehaus.groovy.runtime.callsite.abstractcallsite.callcurrent(abstractcallsite.java:141) once change groupid(it.groupid) groupid("xxx") pom printed fine.
how can "trick groovy" evaluate iterator variable groupid instead of evaluating missing namespace prefix. groupid("$it.groupid") , such didn't work.
cheers
it implicit variable of surrounding closure. in case, it represents implicit variable closure dependency{} incorrect. mean it variable representing each artifact artifacts.
solution, use below:
.... artifacts.each{ar -> dependency{ groupid(ar.groupid) } } ......
Comments
Post a Comment