Как добавить внешнюю зависимость в плагин SBT и сделать ее доступной как для проекта, так и для пути к классу плагина?:
В частности, у меня есть простой плагин, который должен запустить наши тестовые комплекты 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"))
}
}
Проблема в том, что когда я добавляю этот плагин в проект и запускаю его с run-test-suites , то происходит сбой с java.lang.NoClassDefFoundError: org / testng / TestNG хотя show full-classpath показывает, что testng.jar находится на пути к классам.
Так что путь к классу, используемый при выполнении плагина, каким-то образом отличается от того, который используется в моем проекте, так как мне сделать так, чтобы зависимость плагина появлялась в обоих местах?