背景:我有一个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

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

2回复

sbt aspectj with native packager

我正在尝试将sbt-aspectj插件与sbt native packager一起使用,并且遇到了一个问题,其中关联的Aspectj加载时weaver jar的-javaagent路径引用了常春藤缓存位置而不是打包的东西。 也就是说,在运行sbt stage ,通过bash -x targ
1回复

在SBT中使用Spring-Data-Neo4j高级映射模式

我想在我的Scala SBT项目中使用spring-data-neo4j的高级映射模式 ( 托管在github上 ): 我可以使用存储库将节点存储在数据库中,但我不能进行aspectj-weaving工作。 这是我到目前为止: build.sbt: 项目/ plugin
2回复

如何将Java依赖项添加到Scala项目的sbt文件中

我有一个使用Apache NiFi接收器的火花流Scala项目。 这些项目在Eclipse / Scala IDE下运行良好,现在我想将其打包以进行部署。 当我把它添加为 sbt假设它是一个Scala库并试图解决它。 我如何将NiFi接收器及其所有依赖项添加到项目的SBT文件中
2回复

使用Scala IDE中的SBT

从SBT到Scala-IDE的路径在很多地方都有很好的描述: 从SBT项目开始 添加SBT插件定义:addSbtPlugin(“com.typesafe.sbteclipse”%“sbteclipse-plugin”%“2.1.0-RC1”) 从SBT中运行'eclip
1回复

将sbt导入scalaIDE

我是scala的新手。 我在sbt结构中具有以下源代码: 我应该如何将它们导入ScalaIDE(使用Eclipse)? 我尝试导入源,但是无论我选择哪个文件夹(base,src),都不会检测到scala项目。
1回复

通过Scala IDE和SBT进行链接

我正在研究我的第一个Apache Flink wordcount示例。 我的设置是Scala IDE(Eclipse)4.3.0,Scala 2.10.4,SBT版本0.13.8。 IDE为调用env.fromElements引发错误“无法扩展Scala早期版本编译的宏” 我能够
2回复

如何使用Eclipse调试sbt驱动的测试?

我有一组要调试的测试用例(逐步,读取值等)。 如何设置sbt构建,以便可以连接eclipse调试器?
2回复

从Eclipse运行SBT Task

我使用SBT作为构建管理器,Ec​​lipse作为我的IDE,或者至少我想要。 问题是,如何从Eclipse运行特定的SBT任务。 我已经将项目正确地导出到了Eclipse,Eclipse在编写代码时非常有用,但是我如何使用Eclipse作为SBT的前端。 如何从eclipse启动SBT运
1回复

使用sbt和Eclipse时如何获取javadoc?

我使用Activator / Sbt创建一个新项目,在Sbt配置文件中添加要添加的库,然后从sbt生成一个Eclipse项目。 我的问题是,当我在Eclipse中进行编码时,我没有看到任何文档,从Sbt生成Eclipse项目时,是否可以下载并添加所有javadocs? 我从Sbt生成
1回复

SBT和Scala-IDE中的同步增量编译

当我尝试使用SBT命令行和Scala-IDE中的同一项目时,以相同的方式(即仅从命令行或仅从IDE)构建多次允许以递增方式重建项目。 但是,如果我在SBT中编译项目,我注意到它必须在IDE中完全重建(反之亦然)。 有什么办法可以避免吗? 如果重要,Eclipse项目将使用sbteclips