9

POI(poi-3.7とpoi-ooxml-3.7を含む)を使用してGrailsプロジェクトを構築しました。プロジェクトのBuildConfig.groovyファイルの依存関係ブロックにこれら2つの外部ライブラリを追加しました。私がそれをコンパイルしたとき、何も奇妙なことはありません。しかし、そのプロジェクトに対してコマンド「run-app」を呼び出すと、以下のスタックトレースでエラーが発生しました。

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')  
    }  

これを解決するにはどうすればよいですか?どうもありがとう!

4

5 に答える 5

11

これが、数時間行ったり来たりした後にようやく到達した修正です。つまり、poiからxmlbeansを除外し、問題のあるクラスを削除して別のxmlbeansjarを作成します。これが邪悪なリンケージエラーを追い払うための呪文です。

  • BuildConfig.groovyを変更します

    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 /

  • 瓶を再作成します

    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/。

  • 愛を示す

    回答の上矢印をクリックします。:)

于 2011-08-11T13:39:54.460 に答える
1

私はこの問題を解決したと思います。スティーブウォールのソリューションは、Perm genスペース/「grailsrun-app」中にメモリ不足のため、grails2.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をダウンロードし、SteveWallのソリューションを適用します。

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/

私にとってはうまくいきます!幸運を!

于 2011-12-29T19:09:39.883 に答える
1

POIの依存関係の1つ(xmlbeans)とgrailsの間に競合があります。次のように除外できます。

dependencies {
    compile('org.apache.poi:poi-ooxml:3.7') { excludes "xmlbeans" }
}

次のリンクは、問題を追跡するのに役立ちました。

于 2011-06-20T12:15:01.133 に答える
1

同様の問題があり、キャッシュの問題でした。.grailsと.ivy2ディレクトリ(ホームの下)を削除したところ、問題は解決しました。幸運を。

于 2011-07-27T12:47:59.873 に答える
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')  
}  
于 2011-05-23T13:11:29.807 に答える