3

Logbackで適切に使用できるように、タイプの自動注入されたオブジェクトをlogタイプのオブジェクトに置き換えたいと思います。org.apache.commons.logging.Logorg.slf4j.Logger

したがって、...Transformerクラス(Javaで記述)を作成する必要があります。これは、「grails-user」メーリングリストでGraemeRocherから取得したものです。また、このクラスをプラグイン内にパックして、プラグインのフォルダー...Transformer内にロードできる*.jarアーカイブにする必要があることも認識しています。lib/しかし、私はクラスを持っているので、ここで何か間違ったことをしていると思います。ファイルMETA-INFを含むフォルダーと、1つの文字列だけを保持する次のファイルを保持するMANIFEST.MF別のフォルダー:クラスの正規名。servicesorg.codehaus.groovy.transform.ASTTransformation...Transformer

さて、すべてを実行しようとすると問題ありませんが、コンソールgrails cleanを実行しようとすると、が表示されます。grails package-pluginjava.lang.ClassNotFoundException

Stacktraceからのクリッピング:

| Packaging Grails application...

| Error Fatal error during compilation org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

Could not instantiate global transform class my.package.ast.LoggingTransformation specified at jar:file:/C:/Source/MyGrailsAST/lib/replace-logging-logback-ast.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation  because of exception java.lang.ClassNotFoundException: my.package.ast.LoggingTransformation

1 error

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

Could not instantiate global transform class my.package.ast.LoggingTransformation specified at jar:file:/C:/Source/MyGrailsAST/lib/replace-logging-logback-ast.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation  because of exception java.lang.ClassNotFoundException: my.package.ast.LoggingTransformation

誰かがこれを処理しAstTransformer、これについてアドバイスをくれるGrailsプラグインの経験がありますか?私が今まで見たことがない良いチュートリアルはありますか?

私にお知らせください ;)

4

1 に答える 1

1

そのため、調査を行った後、Grailsメーリングリストを参照して最後に質問しました(メーリングリストのアーカイブを参照してください:http://grails.1312388.n4.nabble.com/Grails-user-f1312389.html解決策を見つけました。

私の目標は、Globals ASTTransformationorg.slf4j.Loggerを作成し、通常のオブジェクトの代わりにorg.apache.commons.logging.LogオブジェクトをアノテーションなしですべてのArtefactクラスに挿入することでした。

したがって、手順は次のとおりです。

https://github.com/grails/grails-core/blob/master/grails-logging/src/main/groovy/org/codehaus/groovy/grails/compiler/logging/LoggingTransformer.javaに似たJavaクラスを作成しましたがorg.slf4j.Loggerオブジェクトの私自身の実装で。次のパッケージの下にJava.classを配置することが重要ですorg.codehaus.groovy.grails.compiler

Grailsは、このパッケージで@AstTransformerで注釈が付けられているクラスをスキャンします。(グレアム・ローシェ

MANIFEST.MFフォルダ内のファイルと一緒にJARにパックしMETA-INF/ます。Graeme Rocherが述べたように、すべてのものを含むMETA-INF/servicesディレクトリは必要ありません。

META-INF / servicesのものは必要ありません。おそらく問題が複雑になるため、削除します。

したがって、プラグイン内にクラスが1つしかないため、このステートメントは私の特定の問題に関連していると@AstTransformer思いますが、それは単なる推測です。そして、私はこのトピックに関するさらなる情報を検索していません。たぶん、これを必要とする他の開発者は、このスレッド内でいくつかの調査を行い、彼のソリューションを共有することができます...

JARをプラグインにインポートし、lib/ディレクトリの下に配置する必要があります。この後、、、およびを実行できるようにgrails cleanなりgrails compileますgrails package-plugin

私が行ったように、実装を置き換えたい場合は、指定したプロジェクトのクラスパスからとJARlogを除外する必要があります。これはファイルで行われます:grails-logginggrails-plugin-log4jBuildConfig.groovy

inherits("global") {
  excludes "grails-plugin-log4j", "grails-logging"
}

プラグインgrails install-plugin \path\to\plugin.zipをインストールすると、すべてが期待どおりに機能するはずです。

お役に立てれば...

于 2012-12-12T15:44:35.850 に答える