documentacion - java.lang.LinkageError: violación de restricción de cargador en el proyecto Grails
grails documentation 3.3 2 (5)
Creé un proyecto de Grails con POI (incluya poi-3.7 y poi-ooxml-3.7). He agregado estas 2 bibliotecas externas al bloque de dependencias en el archivo BuildConfig.groovy de mi proyecto. No hay nada extraño cuando lo compilé. Pero cuando llamé al comando "run-app" para ese proyecto, se produjo un error con stacktrace a continuación:
Base Directory: <path-to-my-project>
Resolving dependencies...
Dependencies resolved in 5546ms.
Running script D:/_TOOLS/STS/grails-1.3.5/scripts/RunApp.groovy
Environment set to development
Running Grails application..
2011-05-23 18:51:01,225 [main] ERROR context.GrailsContextLoader - Error executing bootstraps: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/DOMConfiguration"
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/DOMConfiguration"
at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:723)
at grails.spring.BeanBuilder.beans(BeanBuilder.java:573)
at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:519)
at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
at grails.web.container.EmbeddableServer$start.call(Unknown Source)
at RunApp$_run_closure5_closure12.doCall(RunApp:158)
at RunApp$_run_closure5_closure12.doCall(RunApp)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at RunApp$_run_closure5.doCall(RunApp:149)
at RunApp$_run_closure5.call(RunApp)
at RunApp.runInline(RunApp:116)
at RunApp.this$4$runInline(RunApp)
at RunApp$_run_closure1.doCall(RunApp:59)
at RunApp$_run_closure1.doCall(RunApp:33)
at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:427)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.executeTargets(Gant.groovy:590)
at gant.Gant.executeTargets(Gant.groovy:589)
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/DOMConfiguration"
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getDeclaredMethods(Class.java:1791)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
at grails.spring.DynamicElementReader.invokeMethod(DynamicElementReader.groovy:121)
... 26 more
Y aquí está mi configuración:
dependencies {
provided (''com.oracle:ojdbc6_g:11.2.0.1.0'')
runtime (''org.apache.poi:poi:3.7'', ''org.apache.poi:poi-ooxml:3.7'')
}
¿Cómo puedo hacer para solucionar esto? Muchas gracias!
No sé si esto solucionará su problema, pero supongo que su dependencia de los POI debería ser en tiempo de compilación. Intenta cambiar tus dependencias a:
dependencies {
provided (''com.oracle:ojdbc6_g:11.2.0.1.0'')
compile (''org.apache.poi:poi:3.7'', ''org.apache.poi:poi-ooxml:3.7'')
}
Hay un conflicto entre una de las dependencias de POI (xmlbeans) y los griales. Puede excluirlo de la siguiente manera:
dependencies {
compile(''org.apache.poi:poi-ooxml:3.7'') { excludes "xmlbeans" }
}
Los siguientes enlaces fueron útiles para rastrear el problema:
Tuve un problema similar y fue un problema de caché. Eliminé el directorio .grails y .ivy2 (debajo del hogar) y resolvió mis problemas. Buena suerte.
Aquí está la solución que finalmente encontramos después de varias horas de ida y vuelta. En resumen, excluya xmlbeans de poi y cree otro jar de xmlbeans con la clase ofensiva eliminada. Aquí está el conjuro para exorcizar el error de vinculación malvado.
- Modificar BuildConfig.groovy
dependencies {
compile (''org.apache.poi:poi-ooxml:3.6'') {excludes "xmlbeans"}
}
Extraer xmlbeans
cd ~
mkdir xmlbeantmp
cd xmlbeantmp
cp ~ / .ivy2 / cache / org.apache.xmlbeans / xmlbeans / jars / xmlbeans-2.3.0.jar.
jar xf xmlbeans-2.3.0.jarEliminar paquete de clase ofensivo
cd org
rm -rf w3c /Recrea el frasco
discos compactos ../
rm xmlbean-2.3.0.jar
jar cf xmlbean-2.3.0.jar *Copie jar en su lib de proyectos
cp xmlbean-2.3.0.jar your_grails_project / lib /.
Muestra el amor
haga clic en flecha de respuesta hacia arriba. :)
supongo que soluciono este problema. La solución de Steve Wall no quiere funcionar en Grails 2.0.0 debido al espacio de memoria de Perm / Memoria insuficiente durante la ejecución de la aplicación de Grails.
BuildConfig.groovy
....
inherits("global") {
excludes ''xmlbeans'', ''xbean''
}
....
runtime ''xmlbeans:xmlpublic:2.1.0''
runtime ''org.apache.poi:poi-ooxml:3.7''
....
A continuación, descargue xbean-2.1.0.jar y aplique la solución de Steve Wall:
jar xf xbean-2.1.0.jar
cd org
rm -rf w3c/
cd ..
rm xbean-2.1.0.jar
jar cf xbean-2.1.0.patched.jar *
cp xbean-2.1.0.patched.jar your_grails_project/lib/
¡Para mí funciona bien! ¡Buena suerte!