我正在编写一个包含scala宏的项目。这就是我将项目组织成两个子项目“macroProj”和“coreProj”的原因。 “coreProj”依赖于“macroProj”,还包含运行我的代码的主要方法。
我的要求是,当我从根项目中执行sbt run
时,main方法取自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)
但是当我从根目录执行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
答案 0 :(得分:4)
在sbt中,mainClass
是一个将返回程序入口点的任务,如果有的话。
您要做的是让mainClass
成为mainClass
中coreProj
的值。
你可以这样做:
mainClass in Compile := (mainClass in Compile in coreProj).value
这也可以通过
来实现mainClass in Compile <<= mainClass in Compile in coreProj
但是,首选语法为(...).value
since sbt 0.13.0。