Ява.ленг.LinkageError: нарушение ограничений загрузчика в проекте Grails
Я построил проект Grails с POI (включая poi-3.7 и poi-ooxml-3.7). Я добавил Эти 2 внешние библиотеки в блок зависимостей в BuildConfig.заводной файл моего проекта. Нет ничего странного, когда я составлял его. Но когда я вызвал команду "run-app" для этого проекта, произошла ошибка С ниже stacktrace:
Base Directory: <path-to-my-project>
Resolving dependencies...
Dependencies resolved in 5546ms.
Running script D:_TOOLSSTSgrails-1.3.5scriptsRunApp.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$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$withBuildListeners(Gant.groovy)
at gant.Gant$this$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:415)
at gant.Gant.this$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')
}
Как я могу сделать, чтобы решить эту проблему? Большое вам спасибо!
5 ответов
вот исправление, к которому мы, наконец, пришли после нескольких часов туда и обратно. Короче говоря, исключите xmlbeans из poi и создайте еще одну банку xmlbeans с удаленным классом-нарушителем. Вот заклинание, чтобы изгнать ошибку злой связи.
- Изменить BuildConfig.в Groovy
dependencies {
compile ('org.apache.poi:poi-ooxml:3.6') {excludes "xmlbeans"}
}
-
извлечь xmlbeans
cd ~
команды mkdir xmlbeantmp
компакт-диск xmlbeantmp
панель управления ~/.ivy2 / cache / org.апаш.xmlbeans/xmlbeans/jars / xmlbeans-2.3.0.сосуд.
jar xf xmlbeans-2.3.0.Джар -
удалить оскорбительный пакет класс
cd org
rm-rf w3c/ -
воссоздать банку
компакт-диск ../
rm xmlbean-2.3.0.Джар
jar cf xmlbean-2.3.0.jar* -
скопируйте jar в ваши проекты lib
cp xmlbean-2.3.0.сосуд your_grails_project/lib/.
-
показать любовь
нажмите кнопку ответ стрелка вверх. :)
существует конфликт между одной из зависимостей POI (xmlbeans) и граалями. Вы можете исключить его следующим образом:
dependencies {
compile('org.apache.poi:poi-ooxml:3.7') { excludes "xmlbeans" }
}
следующие ссылки были полезны для отслеживания проблемы:
У меня была аналогичная проблема, и это была проблема с кэшем. Я удалил .Grails и .каталог ivy2 (под домом) и это решило мои проблемы. удача.
Я полагаю, что я могу исправить эту проблему. Решение Стива Уолла не хочет работать для меня на grails 2.0.0 из-за Perm Gen space / Out of memory во время "grails run-app".
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 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/
для меня это работает нормально! Удачи!
Я не знаю, исправит ли это вашу проблему, но я предполагаю, что ваша depency на 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')
}