0

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

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

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

show test:unmanaged-classpath [info] ArrayBuffer(Attributed(/home/rohit/Projects/android-sdk-linux/platforms/android- 17/android.jar), Attributed(/home/rohit/Projects/barfrendz/trunk/ src/buzze/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 的顺序吗?

4

2 回答 2

1

而不是 using <+=, use <<=,将unmanagedClasspath自身作为依赖项,然后根据需要对其进行修改。该文档有一个这样的例子resolvers

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

这样,localMaven最终在resolvers.

根据API 文档,它unmanagedClasspath是一种Task类型Classpath。请注意,当您使用该语法时,您更改的是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:\scala\Programas\sbtTest\test-libs\json.jar))
[success] Total time: 0 s, completed 30/08/2013 13:32:42
>
于 2013-08-30T07:47:26.677 回答
0

也许覆盖 unmanagedJars 而不是 unmanagedClasspath 可以让你这样做:

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

于 2013-08-30T06:22:58.773 回答