【发布时间】:2021-03-14 03:28:58
【问题描述】:
所以我的项目结构如下所示:我的根项目包含设置、任务和配置。此外还有一个包含所有子项目的子项目文件夹。我在根项目上创建了一个任务,该任务依赖于子项目 X 中的某些代码。是否可以从该任务定义中的子项目 x 调用方法?
我的代码如下所示:
lazy val rootSettings: Seq[Setting[_]] = Seq (someRootTask := { //I need to call an object from a subproject here..})
我尝试使用反射api没有成功:
import scala.reflect.runtime.{universe => u }
lazy val docSettings: Seq[Setting[_]] = Seq(
rootTask := {
val subproject = baseDirectory.in(playApp).value.getAbsolutePath
val mirror = u.runtimeMirror(getClass.getClassLoader)
val clazz = mirror.staticModule(subproject+"/" +"controllers.pckg.obj" )
val cm = mirror.reflectModule(clazz)
val instanceMirror = mirror.reflect(cm.instance)
val methodName ="sayHi"
val methodSymbol = u.typeOf[instanceMirror.type].declaration(u.newTermName(methodName)).asMethod
val method = instanceMirror.reflectMethod(methodSymbol)
method.apply()
}
)
// still can't point to the object i want to call.
上面的代码抛出一个错误。它找不到对象,我知道它的路径,但我不能从根项目中将它作为 package.class 引用。
【问题讨论】:
-
@Dmytro Mitin,感谢您的及时回复,不,它没有帮助,因为我在 .斯卡拉文件。所以即使我将子项目的对象添加到插件中的非托管源目录。 Sbt。编译器会抛出一个语法错误,我尝试调用它无法解决的 thr 对象。我什至不能首先导入它
-
也不适用于反射。
-
你不需要反思。
标签: scala playframework sbt scala-reflect