无法从“完整配置”生成带有 SBT 0.11 的源代码

Posted

技术标签:

【中文标题】无法从“完整配置”生成带有 SBT 0.11 的源代码【英文标题】:Can not generate source code with SBT 0.11 from "Full Configuration" 【发布时间】:2011-12-01 09:35:37 【问题描述】:

根据可用的 sbt 0.11.0 文档("Common Tasks" wiki page 和其他人)以及在 Scalaz SBT build 和 Scalate SBT build 中看到这是如何完成的,我无法弄清楚为什么我的简单示例不起作用:

import sbt._
import Keys._

object MyBuild extends Build 

  lazy val project = Project(
    id = "root", 
    base = file("."),
    settings = Defaults.defaultSettings ++ Seq(
      (sourceGenerators in Compile) <+= (sourceManaged in Compile) map  dir =>
        val file = dir / "bla.scala"
        IO.write(file, """object Bla extends App  println("bla!") """)
        Seq(file)
      
    )
  )


将它放在一个空项目的 project/build.scala 上并运行“sbt compile”不会生成/编译任何内容,“sbt run”会抱怨它找不到任何主类。

现在,如果我将设置放在“快速配置”build.sbt 中,而不是上面的完整配置,它就可以工作。

(sourceGenerators in Compile) <+= (sourceManaged in Compile) map  dir =>
    val file = dir / "bla.scala"
    IO.write(file, """object Bla extends App  println("bla!") """)
    Seq(file)

显然,需要在“完整配置”项目中创建 build.sbt 文件是不可取的,至少对我来说是这样。

那么,为什么这个设置在完整配置中不起作用?

【问题讨论】:

我将上面的内容复制并粘贴到 project/Build.scala 中,运行“sbt run”,它打印了 bla!正如预期的那样。或许可以通过在对象中添加 println 或更改设置并验证它是否生效来检查文件名是否正确以及定义是否正在加载。 project/build.scalaproject/Build.scala 成功的地方失败了吗? 这个人值得一票否决,因为他的答案一年不被接受。让我成为第一个 :) 【参考方案1】:

只需将您的代码复制粘贴到文件project/Build.scala 并使用sbt run 运行它即可。

您确定您的Build.scala 位置正确(必须在project 目录中)吗?

【讨论】:

以上是关于无法从“完整配置”生成带有 SBT 0.11 的源代码的主要内容,如果未能解决你的问题,请参考以下文章

Sailsjs:在 Sails 0.11 中,如何不使用带有套接字的 onConnect 生命周期回调

Linux 0.11-shell 程序跑起来了-38

Linux 0.11-shell 程序跑起来了-38

无法使用 scala 的 sbt 从存储库中获取插件

Spark 无法从 SBT 找到 JDBC 驱动程序

无法让 SBT 从 Artifactory Pro 公司代理后面下载自己