我想在所有 IT 测试之前从 scala 对象运行嵌入式 kafka 作为 Tests.Setup。
所以,我有类似的东西
Test / testOptions += Tests.Setup { loader =>
loader.loadClass("io.github.embeddedkafka.schemaregistry.EmbeddedKafka$").getMethod("start").invoke(null)
问题是找不到。我检查过
loader.getDefinedPackages
并且没有来自 io.github 的类。
如何从依赖项访问类?
奇怪的是,测试类加载器无法从依赖项加载类。您应该提供如何添加依赖项和运行测试的更多详细信息。通常,如果您将像
libraryDependencies += "io.github..." %% ... % ...
这样的依赖项添加到(普通)build.sbt
并运行像 sbt test
这样的测试,那么 Test / testOptions += Tests.Setup { loader => loader.loadClass...
中的代码 build.sbt
应该可以工作。
无论如何,您可以添加到
project/build.sbt
libraryDependencies += "io.get-coursier" %% "coursier" % "2.1.9"
并以普通方式书写
build.sbt
Test / testOptions += Tests.Setup { loader =>
import coursier._
val files = Fetch()
.addDependencies(
Dependency(Module(Organization("io.github..."), ModuleName("..." /*"..._2.13"*/)), "...version..."),
)
.run()
val classLoader = new java.net.URLClassLoader(
files.map(_.toURI.toURL).toArray,
loader/*getClass.getClassLoader*//*null*/
)
classLoader.loadClass("...").getMethod("...").invoke(...)
}