2

この二重層の回避策に似たコードをいくつか維持しています。

import AssemblyKeys._   
lazy val assemblySettings: Seq[sbt.Project.Setting[_]] = baseAssemblySettings

implicit def wrapTaskKey[T](key: TaskKey[T]): WrappedTaskKey[T] = WrappedTaskKey(key) 
case class WrappedTaskKey[A](key: TaskKey[A]) {
  def orr[T >: A](rhs: Initialize[Task[T]]): Initialize[Task[T]] =
    (key.? zipWith rhs)( (x,y) => (x :^: y :^: KNil) map Scoped.hf2( _ getOrElse _ ))
}

lazy val baseAssemblySettings: Seq[sbt.Project.Setting[_]] = Seq(
  test <<= test orr (test in Test).identity,
  test in assembly <<= (test in Test).identity,
)

ここから)。

この回避策の両方の「レイヤー」を完全に削除するにはどうすればよいですか?

4

2 に答える 2

2

or でもまだ必要かどうかはわかりません。

もう必要ありません。

また

orsbt 0.10 で機能した#202 (タスク スコープ キー)の回避策でした。これは、コメントによると、sbt 0.12 で修正されました。これを sbt 0.13 でテストしてみましょう:

helloworld> set test in Compile in compile := {}
[info] Defining helloworld/compile:compile::test
helloworld> inspect test
[info] Task: Unit
[info] Description:
[info]  Executes all tests.
[info] Provided by:
[info]  {file:/Users/eed3si9n/work/helloworld/}helloworld/test:test
....

したがって、私たちは #202 で問題ありません。実際、or先週 (2013 年 9 月 28 日) 0.10.0 で sbt-assembly から再配線を行ったところ、次のようになりました。

// test
test in assembly := (test in Test).value,

または

これorr#204 ("Reference to undefined setting while using an optional key")orの回避策で、タグによると sbt 0.11.0で壊れ、0.11.1 で修正されました。はもう必要ないので、これは意味のないことですが、sbt 0.11.1 以降orは必要ありません。orr

さらなる混乱を避けるために、非公式ガイドからセクションを削除し、歴史的な関心のために github にリンクしました。

于 2013-10-05T03:54:34.017 に答える