我用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')
}
我该如何解决这个问题?非常感谢你!
答案 0 :(得分:11)
这是经过几个小时的来回走动后我们终于来到的解决方案。简而言之,从poi中排除xmlbeans并创建另一个删除了违规类的xmlbeans jar。这是驱除邪恶联系错误的咒语。
dependencies {
compile ('org.apache.poi:poi-ooxml:3.6') {excludes "xmlbeans"}
}
提取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.jar
删除违规类包
cd org
rm -rf w3c /
重新创建jar
cd ../
rm xmlbean-2.3.0.jar
jar cf xmlbean-2.3.0.jar *
将jar复制到项目lib
cp xmlbean-2.3.0.jar your_grails_project / lib /。
展示爱情
点击接听向上箭头。 :)
答案 1 :(得分:1)
POI的一个依赖项(xmlbeans)和grails之间存在冲突。您可以按如下方式排除它:
dependencies {
compile('org.apache.poi:poi-ooxml:3.7') { excludes "xmlbeans" }
}
以下链接有助于追踪问题:
答案 2 :(得分:1)
我遇到了类似的问题,这是一个缓存问题。我删除了.grails和.ivy2目录(在家里),它解决了我的麻烦。祝好运。
答案 3 :(得分:1)
我想我解决了这个问题。 由于Perm gen space /在“grails run-app”中内存不足,史蒂夫·沃尔的解决方案不希望我在grails 2.0.0上工作。
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/
对我来说它运作正常!祝你好运!
答案 4 :(得分:0)
我不知道这是否能解决您的问题,但我的猜测是您对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')
}