背景:我有一个Play 2.0项目,我正在尝试在我的一些类(Java)中使用jar中的方面添加一些东西来进行aspectj编织。 (sbt-aspectj似乎没有这样做,或者我看不出怎么样)。 所以我需要添加一个自定义任务,并依赖于编译。 我有点想出了依赖部分。 但是,因为我不确切知道我在做什么,但是,我想使用IDE开发它(我使用的是Scala-IDE)。 由于sbt项目(以及Play项目)是递归定义的,我假设我可以:

  1. 将eclipse插件添加到myplay / project / project / plugins.sbt
  2. 将sbt main jar(和aspectj jar)添加到myplay / project / project / build.sbt:

    libraryDependencies ++ = Seq(“org.scala-sbt”%“main”%“0.12.2”,“aspectj”%“aspectj-tools”%“1.0.6”)

  3. 放入myplay /项目

  4. 运行sbt,运行eclipse任务,然后将项目作为单独的项目导入eclipse。

我可以做到这一点,虽然build.scala(和其他scala文件)最初不被认为是源代码,我必须稍微改进构建路径。 但是,即使我已经为项目定义了sbt main,eclipse IDE和编译任务都会产生错误:

> compile
[error] .../myplay/project/Build.scala:2: not found: object keys
[error] import keys.Keys._
[error]        ^
[error] .../myplay/project/SbtAspectJ.scala:2: object Configurations is not a member of package sbt
[error] import sbt.Configurations.Compile
[error]            ^
[error] .../myplay/project/SbtAspectJ.scala:3: object Keys is not a member of package sbt
[error] import sbt.Keys._
[error]            ^
[error] three errors found

eclipse项目在其引用库中既没有显示主要工具也没有方面工具。 但是,如果我给它一个虚假的版本(例如0.12.4),重新加载失败,所以它似乎使用依赖。

所以,......首先:这是正确的方法吗? 第二:如果是这样,为什么不添加库。 (第三:请不要让我感到愚蠢,我错过了。)

===============>>#1 票数:7

如果您获取object Keys is not a member of package sbt错误object Keys is not a member of package sbt ,那么您应该检查您是否从基本目录运行sbt,而不是/ project目录。

===============>>#2 票数:1

SBT-的AspectJ

sbt-aspectj似乎没有这样做,或者我看不出怎么做。

我认为这是真正的问题。 已经有一个插件可以完成工作,所以尝试使其工作而不是摆弄构建。 使用build.scala中的插件有点棘手。 幸运的是, github上有一些示例项目:

import sbt._
import sbt.Keys._
import com.typesafe.sbt.SbtAspectj.{ Aspectj, aspectjSettings, compiledClasses }
import com.typesafe.sbt.SbtAspectj.AspectjKeys.{ binaries, compileOnly, inputs, lintProperties }


object SampleBuild extends Build {
  ....

  // precompiled aspects
  lazy val tracer = Project(
    "tracer",
    file("tracer"),
    settings = buildSettings ++ aspectjSettings ++ Seq(
      // stop after compiling the aspects (no weaving)
      compileOnly in Aspectj := true,

      // ignore warnings (we don't have the sample classes)
      lintProperties in Aspectj += "invalidAbsoluteTypeName = ignore",

      // replace regular products with compiled aspects
      products in Compile <<= products in Aspectj
    )
  )
}

你如何开发SBT项目呢?

如果你对黑客攻击感兴趣,那么首先要去的是入门指南。 具体来说,您的问题应该在.scala Build Definition页面中回答。

我想你希望你的构建使用"aspectj" % "aspectj-tools" % "1.0.6" 如果是这样,它应该包含在myplay/project/plugins.sbt ,你的代码应该进入myplay/project/common.scala或其他东西。 如果你想使用IDE,你可以更好地将它构建为sbt插件。 那样你的代码就会进入src/main/scala 在sbt插件结构的示例中查看sbt / sbt-aspectj或sbt / sbt-assembly。

  ask by mconner translate from so

未解决问题?本站智能推荐: