怎樣才能增加對外依存度爲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測試界面不適用於我們的套件,這就是爲什麼我一起入侵一個小插件。我想避免實現一個完整的測試接口,而且我通常對在項目中運行時如何在類路徑中使用插件的依賴關係感到困惑。 –
感謝您的幫助,我設法解決了我在問題答案中所描述的問題(儘管我不完全確定它的工作原理 - 這總是有點不盡人意)。 –