1

Play で jcabi-aspects の例が見つかりません! 応用。

ここに私のBuild.scalaファイルがあります

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

  val appName         = "test-for-fun"
  val appVersion      = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    // Add your project dependencies here,
    "com.jcabi" % "jcabi-aspects" % "1.0-SNAPSHOT",
    "org.aspectj" % "aspectjrt" % "1.6.12" % "runtime",
    javaCore,
    javaJdbc,
    javaEbean
  )

  val main = play.Project(appName, appVersion, appDependencies).settings(
    resolvers += "oss.sonatype.org" at "https://oss.sonatype.org/content/repositories/snapshots/" 
  )

}

そして、これが私が呼び出す方法です@Loggable

package controllers;

import play.*;
import play.mvc.*;
import com.jcabi.aspects.Loggable;

import views.html.*;

public class Application extends Controller {
    @Loggable(Loggable.INFO)
    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }

}

ヒントを提供できる場合は、大歓迎です。

私の主な目標は、AOP を使用してログを記録することです。あなたも大歓迎です。

ありがとう

4

1 に答える 1

2

私は実際に今日同じことを調べていて、私のscalaプロジェクトで動作するようになりました(これはSBTを使用していますが、intellijを介して実行しています)。いくつかのことをしなければならないと思います:

  1. hereで述べたように、実行している Java コマンドに -javaagent:~/path-to/aspectjweaver.jar を追加する必要があります。play プロジェクトに javaagent フラグを追加する方法の例については、こちらを参照してください。

  2. 追加の依存関係をいくつか含めます。

    libraryDependencies += "org.aspectj" % "aspectjweaver" % "1.7.2"

    libraryDependencies += "org.aspectj" % "aspectjrt" % "1.7.2"

    libraryDependencies += "com.jcabi" % "jcabi-aspects" % "0.8"

    libraryDependencies += "com.jcabi" % "jcabi-log" % "0.8"

  3. プロジェクトのリソース フォルダーに META-INF/aop.xml を作成します。これは、aspectj のランタイム ウィービングを定義するものです。例については、この要点を参照してください。

  4. MethodLogger クラスを jcabi-aspects v0.8 (および Mnemos.java と NamedThreads.java) から com.yourcompany.yourpackage にコピーします。この理由は (私が知る限り)、jcabi パッケージが特別な方法でコンパイルされているためであり、代わりにランタイム ウィービングを実行したいので、これで回避できます。編集: おそらくこれは、私が Java 7 を使用していて、プラグインが Java 6 でコンパイルされているためです。SBT でビルドするときにいくつかの警告が表示されます。

誰かがより良い方法を持っているかどうか聞いてうれしいですが、これは少なくともうまくいくようです.

于 2013-09-12T07:13:53.417 に答える