java.lang.LinkageError:Grails项目中的加载程序约束违例

问题描述

|| 我已经使用POI构建了Grails项目(包括poi-3.7和poi-ooxml-3.7)。我已经将这两个外部库添加到我项目的BuildConfig.groovy文件中的依赖关系块中。当我编译它时,没有什么奇怪的。但是,当我为该项目调用命令\“ run-app \”时,以下stacktrace发生了错误:
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  
这是我的配置:
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\')  
    }  
我该怎么做才能解决这个问题?非常感谢!     

解决方法

这是我们经过几个小时的反复来终于解决的问题。简而言之,从poi中排除xmlbeans,并创建另一个删除了有问题的类的xmlbeans jar。这是驱除邪恶联系错误的咒语。 修改BuildConfig.groovy
    dependencies {
       compile (\'org.apache.poi:poi-ooxml:3.6\') {excludes \"xmlbeans\"}
    }
提取xmlbeans 光盘〜 mkdir xmlbeantmp cd xmlbeantmp cp〜/ .ivy2 / cache / org.apache.xmlbeans / xmlbeans / jars / xmlbeans-2.3.0.jar。 jar xf xmlbeans-2.3.0.jar 删除有问题的课程包 光盘组织 rm -rf w3c / 重新创建罐子 cd ../ rm xmlbean-2.3.0.jar jar cf xmlbean-2.3.0.jar * 将jar复制到您的项目库中 cp xmlbean-2.3.0.jar your_grails_project / lib /。 表达爱意 单击向上回答箭头。 :)     ,POI的依赖项(xmlbeans)和grails之间存在冲突。您可以按以下方式排除它:
dependencies {
    compile(\'org.apache.poi:poi-ooxml:3.7\') { excludes \"xmlbeans\" }
}
以下链接对于跟踪问题很有用: http://markmail.org/message/ojglzgft57ts4dgw http://jira.grails.org/browse/MAVEN-22     ,我有一个类似的问题,这是一个缓存问题。我删除了.grails和.ivy2目录(在主目录下),它解决了我的麻烦。祝好运。     ,我想我可以解决这个问题。 Steve Wall的解决方案在grails 2.0.0上对我不起作用,因为在“ grails run-app \”期间存在Perm生成空间/内存不足。 BuildConfig.groovy
....
inherits(\"global\") {
    excludes \'xmlbeans\',\'xbean\'
}
....
runtime \'xmlbeans:xmlpublic:2.1.0\'
runtime \'org.apache.poi:poi-ooxml:3.7\'
....
然后下载xbean-2.1.0.jar,并应用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/
对我来说,一切正常!祝好运!     ,我不知道这是否可以解决您的问题,但是我的猜测是您对POI的依赖程度可能应该在编译时。尝试将依赖项更改为:
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\')  
}  
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...