Как вы сами разрабатываете проект SBT?

Предыстория: у меня есть проект Play 2.0, и я пытаюсь добавить что-то, чтобы сделать плетение аспектов, используя аспекты в банке на некоторых из моих классов (Java). (кажется, что sbt-aspectj этого не делает, или я не понимаю, как это сделать). Поэтому мне нужно добавить пользовательскую задачу и сделать так, чтобы она зависела от компиляции. Я вроде понял часть зависимости. Однако, поскольку я еще точно не знаю, что делаю, я хочу разработать это с помощью IDE (я использую Scala-IDE). Поскольку проекты sbt (и, следовательно, проекты Play) определяются рекурсивно, я предположил, что смогу:

  1. Добавьте плагин eclipse в myplay/project/project/plugins.sbt.
  2. Добавьте основной jar-файл sbt (и jar-файл аспекта) в myplay/project/project/build.sbt:

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

  3. Загляните в myplay/project

  4. Запустите sbt, запустите задачу eclipse, затем импортируйте проект в eclipse как отдельный проект.

Я могу это сделать, хотя файл build.scala (и другие файлы scala) изначально не считается исходным кодом, и мне приходится немного возиться с путем сборки. Однако, несмотря на то, что у меня есть основной sbt, определенный для проекта, как 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), перезагрузка завершится ошибкой, поэтому, похоже, она использует зависимость.

Итак,... Во-первых: это правильный способ сделать это? Во-вторых: если да, то почему не добавляются библиотеки. (Третье: пожалуйста, не считайте это глупостью, которую я пропустил.)


person mconner    schedule 16.04.2013    source источник
comment
Действительно, ЛЮБЫЕ указатели были бы полезны.   -  person mconner    schedule 01.05.2013


Ответы (2)


Если вы получаете ошибку object Keys is not a member of package sbt, вам следует убедиться, что вы запускаете sbt из базового каталога, а не из каталога /project.

person tmarthal    schedule 26.06.2013

sbt-aspectj

sbt-aspectj, похоже, этого не делает, или я не понимаю, как это сделать.

Я думаю, что это реальная проблема. Уже есть плагин, который работает, поэтому попробуйте заставить его работать, а не возиться со сборкой. Использование плагинов из build.scala немного сложно. К счастью, примеры проектов есть на гитхаб:

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-aspectj или sbt/sbt-assembly на примере структуры плагина sbt.

person Eugene Yokota    schedule 01.09.2013