1

何らかの理由で、「grails war」は「WEB-INF/lib」に「groovy-1.6.9.jar」および「groovy-all-1.7.8.jar」ファイルを含めています。Grails 1.3.7 を使用していますが、Tomcat でこの war をデプロイすると、次のエラーが表示されます。

org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/applicationContext.xml] で定義された 'pluginManager' という名前の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.NoSuchMethodError: org.codehaus.groovy.control.SourceUnit.getSource()Lorg/codehaus/groovy/control/io/ReaderSource; です。

戦争を展開できる唯一の方法は、古い groovy ファイルを削除することであり、アプリケーションは正常に動作します。

依存関係プロセスをデバッグしましたが、見つけたのはこれだけでした:

[NOT REQUIRED] org.codehaus.groovy#groovy;1.6.9!groovy.jar
...
:: evicted modules:
junit#junit;3.8.2 by [junit#junit;4.8.1] in [test]
          in org.codehaus.groovy#groovy;1.6.9 with latest-revision

それで、私は続けて、以下を含むファイル 'org.codehaus.groovy.modules.http-builder/http-builder/ivy-0.5.0-RC2.xml' にたどり着きました:

<dependency org="org.codehaus.groovy" name="groovy" rev="[1.5,1.6.99)"

この行を「[1.7,1.7.8)」に変更したところ、依存関係のプロセスは正常に機能し、戦争は問題なく展開されるようになりましたが、これまで触れたことがなく、心配です。これは Grails の依存関係を進める正しい方法ですか?

これはすべて、JQuery UI プラグインをインストールした後に発生し始め、それを削除した後でも問題は続きました。

ありがとう

4

1 に答える 1

9

BuildConfig.groovy の依存関係ブロックに http-builder があるようです。http-builder は推移的な依存関係として groovy を取り込みます。Grails に同梱されている groovy-all との競合を避けるために、これを除外する必要があります。

compile("org.codehaus.groovy.modules.http-builder:http-builder:0.5.0") {
    excludes 'groovy', 'xml-apis'
}

(注: 上記の例では xml-apis も除外されています。Java 6 を使用している場合は、クラスの重複を避けるために除外することをお勧めします)

このような競合を追跡するには、次のコマンドを使用できます。

grails dependency-report

target/dependency-report/ の下にレポートを生成します

于 2011-03-02T21:05:19.507 に答える