1

我在 Play 中找不到任何 jcabi 方面的例子!应用。

这是我的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 执行日志记录,所以如果您知道使用 Play 的其他方式!也欢迎你。

谢谢

4

1 回答 1

2

我今天实际上正在研究同样的事情,并将它与我的 scala 项目(它使用 SBT,尽管我一直在通过 intellij 运行东西)一起工作。我认为你将不得不做一些事情:

  1. 如此处所述,您需要为正在运行的任何 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. 将 jcabi-aspects v0.8(以及 Mnemos.java 和 NamedThreads.java)中的 MethodLogger 类复制到您的 com.yourcompany.yourpackage 中。这样做的原因(据我所知)是 jcabi 包是以一种特殊的方式编译的,而我们想要进行运行时编织,所以这解决了这个问题。编辑:也许这是由于我使用 Java 7 和在 Java 6 中编译的插件——我在 SBT 中构建时看到了一些警告。

我很高兴听到有人有更好的方法,但这至少似乎有效。

于 2013-09-12T07:13:53.417 回答