首先,sbt的所有配置都是settingKey,所有任务都是taskKey(setting和task有时候是有一样的效果)。举例:val scalacOptions = taskKey[Seq[String]]("Options for the Scala compiler.") 这里是一个任务,其中"Options for the Scala compiler."是这个任务的描述,scalacOptions是这个任务的名字(唯一),这个名字很关键,scalacOptions的名称是通过宏获取的,宏最终会生成一个TaskKey[T]对象,settingKey同理。