Playframework 2.0 如何创建自定义;一揽子计划;在SBT中只存储特定包的任务?

Playframework 2.0 如何创建自定义;一揽子计划;在SBT中只存储特定包的任务?,playframework-2.0,sbt,Playframework 2.0,Sbt,我有一个Play项目运行在Play 2.1.1上 [root]> about [info] This is sbt 0.13.1 [info] The current project is {file:/Users/jacek/sandbox/so/config-package/}root 0.1-SNAPSHOT [info] The current project is built against Scala 2.10.3 [info] Available Plugins: com.t

我有一个Play项目运行在Play 2.1.1上

[root]> about
[info] This is sbt 0.13.1
[info] The current project is {file:/Users/jacek/sandbox/so/config-package/}root 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.3
[info] Available Plugins: com.typesafe.sbt.SbtGit, com.typesafe.sbt.SbtProguard, growl.GrowlingTests, org.sbtidea.SbtIdeaPlugin, np.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3
我想定义一个单独的、不同的任务,以便在我的Play项目中只使用一个特定的包(例如,仅使用models包)。我不希望覆盖当前的
任务,因为我希望保留它们的行为

如何基于当前的
任务创建自定义任务


我已经看过SBT文档,但这些示例相当简单,没有给出任何使用SBT库的示例。

我想提出一种使用SBT库的方法

以下是一个示例项目的
build.sbt

lazy val CustomPackage = config("custompackage") extend(Compile) describedAs("Custom package configuration")

packageBin in CustomPackage := {
  val log = streams.value.log
  import log._
  info("""Returning custom packaging artifact, i.e. file(".")""")
  file(".")
}

lazy val root = project in file(".") overrideConfigs (CustomPackage)
在上面的构建配置中,有一个作用域设置和任务的
custompackage
配置。作为如何更改
packageBin
任务行为的示例,此范围中有一个(重新)定义。最后一行将自定义配置添加到项目中

当您运行SBT shell(
SBT
)时,您会注意到真正的
packageBin
任务在
custompackage
范围内更改时未被触及。默认情况下,您处于
Compile
配置中。要更改它,您需要使用扩展语法在另一个配置中执行任务

[root]> configuration
[info] compile
[root]> show packageBin
[info] /Users/jacek/sandbox/so/config-package/target/scala-2.10/root_2.10-0.1-SNAPSHOT.jar
[success] Total time: 0 s, completed Feb 8, 2014 2:27:10 PM
将配置轴更改为
custompackage
时,任务
packageBin
会更改

[root]> custompackage:configuration
[info] custompackage
[root]> show custompackage:packageBin
[info] Returning custom packaging artifact, i.e. file(".")
[info] .
[success] Total time: 0 s, completed Feb 8, 2014 2:27:20 PM
[root]> custompackage:packageBin
[info] Returning custom packaging artifact, i.e. file(".")
[success] Total time: 0 s, completed Feb 8, 2014 2:27:25 PM
所有试验均在SBT0.13.1下进行

[root]> about
[info] This is sbt 0.13.1
[info] The current project is {file:/Users/jacek/sandbox/so/config-package/}root 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.3
[info] Available Plugins: com.typesafe.sbt.SbtGit, com.typesafe.sbt.SbtProguard, growl.GrowlingTests, org.sbtidea.SbtIdeaPlugin, np.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3

您想创建一些依赖于包任务的任务,还是想在运行包之前执行一些操作?我想克隆包任务并修改克隆,以不影响原始任务。我希望这个包任务的克隆只打包我的项目的一个子集(例如模型包)。我希望有一个简单的方法来利用SBTAPI来实现这一点。找到解决这个问题的方法了吗?我正在尝试做同样的事情,但找不到实现itI的方法。我相信您建议自定义范围的方法是正确的。然而,事实证明实施起来很困难。我相信找到的实现就是我要寻找的。但是,我无法在自定义范围中实现这一点。可以找到我最近的尝试。你知道我在实现中做错了什么吗?fwiw,我还打算建议一个自定义配置。(感谢Jacek花时间写出来并试用。)Joseph,很高兴你展示了代码,但你没有解释为什么它不起作用。是否有错误消息?实际行为与预期行为有何不同?在我的gist中尝试代码并运行custompackage:package时,它将整个项目打包,就好像我只是在运行package一样。但是,当我将代码修改为“mappingsin(Compile,packageBin)”并运行包时,它只按照预期打包models文件夹。因此,出于某种原因,我最初的“mappingsin(CustomPackage,packageBin)”调用不起作用。FWIW,我尝试了Jacek的代码,但由于我使用Play 2.1.1,我不得不使用sbt 0.12.2,并且提供的示例没有按预期工作(目标文件在错误的目录中生成,未过滤)