我正在写一个包含scala宏的项目。这就是为什么我将项目组织为两个子项目,称为“ macroProj”和“ coreProj”的原因。“ coreProj”取决于“ macroProj”,还包含运行我的代码的主要方法。
我的要求是,当我sbt run从根项目中进行操作时,主要方法是从coreProj子项目中获取的。我搜索并找到了一个可以解决这个问题的线程
基于此,我的build.sbt看起来像
lazy val root = project.aggregate(coreProj,macroProj).dependsOn(coreProj,macroProj)
lazy val commonSettings = Seq(
scalaVersion := "2.11.7",
organization := "com.abhi"
)
lazy val coreProj = (project in file("core"))
.dependsOn(macroProj)
.settings(commonSettings : _*)
.settings(
mainClass in Compile := Some("demo.Usage")
)
lazy val macroProj = (project in file("macro"))
.settings(commonSettings : _*)
.settings(libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value)
mainClass in Compile <<= (run in Compile in coreProj)
Run Code Online (Sandbox Code Playgroud)
但是当我sbt run从根目录开始的时候。我得到一个错误
/Users/abhishek.srivastava/MyProjects/sbt-macro/built.sbt:19: error: type mismatch;
found : sbt.InputKey[Unit]
required: sbt.Def.Initialize[sbt.Task[Option[String]]]
mainClass in Compile <<= (run in Compile in coreProj)
^
[error] Type error in expression
Run Code Online (Sandbox Code Playgroud)
在sbt中,mainClass是一项任务,它将向您的程序返回入口点(如果有)。
您想要做的就是in mainClass的值。mainClasscoreProj
您可以通过以下方式实现:
mainClass in Compile := (mainClass in Compile in coreProj).value
Run Code Online (Sandbox Code Playgroud)
这也可以通过
mainClass in Compile <<= mainClass in Compile in coreProj
Run Code Online (Sandbox Code Playgroud)
但是,首选语法是(...).value 从sbt 0.13.0开始。
| 归档时间: |
|
| 查看次数: |
1692 次 |
| 最近记录: |