是否存在为sbt中的unmanagedClasspath准备jar的方法



我将android-sbt-plugin与sbt一起使用,我想将一个非托管jar添加到测试类路径中。原因是android.jar包含org.json库的存根函数,并导致单元测试抛出异常。这就是我正在做的

    unmanagedClasspath in Test <+= (baseDirectory) map { base =>
    Attributed.blank(base/"test-libs"/"json.jar")
    }

由于jar的顺序,当我在sbt中运行测试命令时,会忽略此文件。如果我输入命令,订单会清楚地显示android.jar为第一个jar

显示测试:非托管类路径[info]ArrayBuffer(Attributed(/home/rohit/Projects/android-sdk-linux/platforms/android-17/android.jar),Attributed(/home/rohit/Projects/barfrendz/trunk/src/buze/test-libs/json.jar)

如果我创建了一个lib文件夹,并让sbt获取json-jar,那么现在运行的测试的顺序是相反的,但由于与android.jar中的org.json命名空间冲突,我无法再创建android包

[error] (Buzze/android:proguard) java.io.IOException: Can't read [/home/rohit/Projects/barfrendz/trunk/src/buzze/lib/json.jar(;;;;!META-INF/MANIFEST.MF,!**/R.class,!**/R$*.class,!**/TR.class,!**/TR$.class,!**/library.properties)] (Can't process class [org/json/CDL.class] (Unsupported version number [51.0] for class format))

我是否可以更改单元测试类路径中jar的顺序?

不要使用<+=,而是使用<<=,将unmanagedClasspath本身作为依赖项,然后根据需要对其进行修改。文档中有这样一个resolvers:示例

resolvers <<= resolvers {rs =>
  val localMaven = "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository"
  localMaven +: rs
}

这样,localMavenresolvers中首先结束。

根据API文档,unmanagedClasspathClasspath类型的Task。请注意,当您使用该语法时,您更改的是Classpath,而不是Task

类路径的API文档在这里——它是一个type,它指向Seq[Attributed[File]],所以您可以使用任何Seq命令来操作它。我在这里试用了这个片段,它很有效:

$ cat build.sbt
unmanagedClasspath in Test <<= (unmanagedClasspath in Test, baseDirectory) map { (uc, base) =>
    Attributed.blank(base/"test-libs"/"json.jar") +: uc
}
Daniel@DANIEL-PC /c/scala/Programas/sbtTest
$ sbt
[info] Set current project to default-60c6f9 (in build file:/C:/scala/Programas/sbtTest/)
> show test:unmanaged-classpath
[info] ArrayBuffer(Attributed(C:scalaProgramassbtTesttest-libsjson.jar))
[success] Total time: 0 s, completed 30/08/2013 13:32:42
>

也许覆盖unmanagedJars而不是unmanagedClasspath会允许您这样做:

http://www.scala-sbt.org/0.12.3/docs/Detailed-Topics/Library-Management.html

相关内容

  • 没有找到相关文章

最新更新