我在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执行日志记录,如果您知道使用Play的其他方式!你也受到欢迎。
由于
答案 0 :(得分:2)
我今天实际上正在研究同样的事情,并使用我的scala项目(使用SBT,虽然我已经通过intellij运行了东西)。我认为你将不得不做一些事情:
如上所述here,您要为正在运行的任何java命令添加-javaagent:〜/ path-to / aspectjweaver.jar。有关如何为播放项目添加javaagent标志的示例,请参阅here。
包含一些额外的依赖项:
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"
在项目的资源文件夹中创建META-INF / aop.xml。这就是为aspectj定义运行时编织的原因。有关示例,请参阅this gist。
将MethodLogger类从jcabi-aspects v0.8(和Mnemos.java和NamedThreads.java)复制到com.yourcompany.yourpackage中。这个(据我所知)的原因是jcabi包是以特殊的方式编译的,我们想要进行运行时编织,所以这就解决了这个问题。编辑:也许这是因为我使用Java 7并且插件是用Java 6编译的 - 我在SBT中构建时会看到一些警告。
我很高兴听到有人有更好的方法,但这至少似乎有效。