0

私はscalaでアプリケーションを持っています。機能の 1 つに AOP を使用する必要があります。プラグインsbt-aspectjを使用しました。sbt コンソールを使用して実行すると、すべて正常に動作します。ただし、実行可能なjarを使用すると機能しません。sbt-aspect git ページで提供されているサンプル コードを試してみました。しかし、私はエラーが発生しています

[warn] warning incorrect classpath: D:\source\jvm\modules\scala\frameworks\aspectjTracer\target\scala-2.11\classes
[warn] Missing message: configure.invalidClasspathSection in: org.aspectj.ajdt.ajc.messages
[error] error no sources specified

.

[trace] Stack trace suppressed: run 'last aspectjTracer/aspectj:ajc' for the full output.
[error] (aspectjTracer/aspectj:ajc) org.aspectj.bridge.AbortException: ABORT
[error] Expected project ID
[error] Expected configuration
[error] Expected ':' (if selecting a configuration)
[error] Expected key
[error] Not a valid key: aspectjTracker (similar: aspectjSource, aspectj-source, aspectjDirectory)
[error] last aspectjTracker/aspectj:ajc
[error]  

私の Build.scala は以下のとおりです。

object frameworkBuild extends Build {

  import Dependencies._
  val akkaV = "2.3.6"
  val sprayV = "1.3.1"
  val musterV = "0.3.0"

  val common_settings = Defaults.defaultSettings ++
    Seq(version := "1.3-SNAPSHOT",
      organization := "com.reactore",
      scalaVersion in ThisBuild := "2.11.2",
      scalacOptions ++= Seq("-unchecked", "-feature", "-deprecation"),

      libraryDependencies := frameworkDependencies ++ testLibraryDependencies,
      publishMavenStyle := true,

    )

  connectInput in run := true

  lazy val aspectJTracer = Project(
    "aspectjTracer",
    file("aspectjTracer"),
    settings = common_settings ++ aspectjSettings ++ Seq(
      // input compiled scala classes
      inputs in Aspectj <+= compiledClasses,

      // ignore warnings
      lintProperties in Aspectj += "invalidAbsoluteTypeName = ignore",
      lintProperties in Aspectj += "adviceDidNotMatch = ignore",

      // replace regular products with compiled aspects
      products in Compile <<= products in Aspectj
    )
  )
  // test that the instrumentation works
  lazy val instrumented = Project(
    "instrumented",
    file("instrumented"),
    dependencies = Seq(aspectJTracer),
    settings = common_settings ++ aspectjSettings ++ Seq(
      // add the compiled aspects from tracer
      binaries in Aspectj <++= products in Compile in aspectJTracer,

      // weave this project's classes
      inputs in Aspectj <+= compiledClasses,
      products in Compile <<= products in Aspectj,
      products in Runtime <<= products in Compile
    )
  )
  lazy val frameworks = Project(id = "frameworks", base = file("."), settings = common_settings).aggregate( core, baseDomain,aspectJTracer,instrumented)

  lazy val core = Project(id = "framework-core", base = file("framework-core"), settings = common_settings)
  lazy val baseDomain = Project(id = "framework-base-domain", base = file("framework-base-domain"), settings = common_settings).dependsOn(core,aspectJTracer,instrumented)
}

これを修正する方法を知っている人はいますか?これを sbt-aspectj github ページに投稿し、そこでも応答を待っています。しかし、私はこれを修正するために少し急いでいます。あなたの助けは本当に感謝されます.

4

1 に答える 1

0

最後に、問題は解決されました。に javaagent を追加しましたbuild.scala。しかし、 で実行している間はsbt-one-jar、その jar を取得していませんでした。したがって、javaagent をアスペクトウィーバーの jar ファイルとして手動で提供したところ、機能しました。ただし、jar ファイルをアスペクトで起動するには、ほぼ 3 ~ 4 分かかります。

アスペクトウェーブバーが原因で、jar ファイルを開始するのに 15 分かかることもあります。これが、aspectj の問題なのか sbt-one-jar の問題なのかはわかりませんが、one-jar の問題だと思います。他の誰かが同じ問題に直面していますか? sbt-one-jar にアクティビティが見られないので、ここで質問します。

于 2015-03-09T11:25:12.260 に答える