怎样才能增加对外依存度为SBT插件,并使其可在这两个项目和插件的类路径:SBT:插件依赖关系和项目的classpath
具体来说,我有一个简单的插件,它应该运行我们的TestNG的测试套房并做一些后期处理。这里是一个简化的版本:
import sbt._
import java.util.ArrayList
import Keys._
import org.testng._
object RunTestSuitesPlugin extends Plugin {
lazy val runTestSuites = TaskKey[Unit]("run-test-suites", "runs TestNG test suites")
lazy val testSuites = SettingKey[Seq[String]]("test-suites", "list of test suites to run")
class JavaListWrapper[T](val seq: Seq[T]) {
def toJavaList = seq.foldLeft(new java.util.ArrayList[T](seq.size)) { (al, e) => al.add(e); al }
}
implicit def listToJavaList[T](l: Seq[T]) = new JavaListWrapper(l)
def runTestSuitesTask = runTestSuites <<= (target, streams, testSuites) map {
(targetDirectory, taskStream, suites) =>
import taskStream.log
log.info("running test suites: " + suites)
runSuites(suites)
}
private def runSuites(testSuites: Seq[String]) = {
var tester = new TestNG
tester.setTestSuites(testSuites.toJavaList)
tester.run()
}
def testSuiteSettings = {
inConfig(Compile)(Seq(
runTestSuitesTask,
testSuites := Seq("testsuites/mysuite.xml"),
libraryDependencies += "org.testng" % "testng" % "5.14"))
}
}
的问题是,当我这个插件添加到项目中,并与运行测试套件运行那么它失败java.lang.NoClassDefFoundError:组织/ TestNG的/ TestNG即使显示完整路径显示testng.jar位于类路径中。
因此,不知何故执行插件时使用的类路径与我的项目中使用的类路径不同,所以如何使插件依赖项出现在两个地方?
感谢您的澄清,不幸的是,testng测试界面不适用于我们的套件,这就是为什么我一起入侵一个小插件。我想避免实现一个完整的测试接口,而且我通常对在项目中运行时如何在类路径中使用插件的依赖关系感到困惑。 –
感谢您的帮助,我设法解决了我在问题答案中所描述的问题(尽管我不完全确定它的工作原理 - 这总是有点不尽人意)。 –