【问题标题】:How to create custom "package" task to jar up only specific package in SBT?如何创建自定义“包”任务以仅在 SBT 中打包特定包?
【发布时间】:2023-03-14 04:08:01
【问题描述】:

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

我想定义一个单独且不同的任务,以仅在我的 Play 项目中创建一个特定的包(例如,只是模型包)。我不想覆盖当前的 package 任务,因为我想保留它们的行为。

我将如何根据当前的package 任务创建自定义任务?

我查看了 SBT 文档中的 Custom Settings and Tasks,但这些示例相当简单,并没有给出任何使用 SBT 库的示例。

【问题讨论】:

  • 你想创建一些依赖于包任务的任务,还是你想在包运行之前做一些事情?
  • 我想克隆打包任务并修改克隆,以免影响原任务。我希望这个包任务的克隆只打包我项目的一个子集(例如模型包)。我希望有一种直接的方法来利用 SBT API 来做到这一点。
  • 找到解决这个问题的方法了吗?我正在尝试做同样的事情,但找不到实现它的方法

标签: playframework-2.0 sbt


【解决方案1】:

我想通过custom configuration 提出一种方法。

以下是一个示例项目的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

全部在 SBT 0.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

【讨论】:

  • 我相信您的方法在建议自定义范围方面是正确的。然而,实践证明是困难的。我相信找到here 的实现是我正在寻找的。但是,我无法在自定义范围内实现这一点。我最近尝试这样做可以找到here。任何想法我在实施中做错了什么?
  • fwiw,我也打算建议一个自定义配置。 (感谢 Jacek 花时间写出来并尝试它。) Joseph,你展示了代码很好,但你没有解释为什么它不起作用。有错误信息吗?实际行为与预期行为有何不同?
  • 在我的 gist 中尝试代码并运行 custompackage:package 时,它​​会打包整个项目,就好像我只是在运行 package.json 一样。但是,当我将代码修改为“(编译,packageBin)中的映射”并运行包时,它只按预期打包模型文件夹。因此,出于某种原因,我最初的“(CustomPackage,packageBin)中的映射”调用不起作用。 FWIW,我尝试了 Jacek 的代码,但是因为我使用的是 Play 2.1.1,所以我必须使用 sbt 0.12.2,并且提供的示例没有按预期工作(目标文件是在错误的目录中生成的并且没有被过滤)
猜你喜欢
  • 2014-09-08
  • 2017-02-02
  • 2015-01-03
  • 2021-11-29
  • 1970-01-01
  • 2017-06-15
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多