0

私はandroid-sbt-pluginsbt で を使用しており、管理されていない jar をテスト クラスパスに追加したいと考えています。android.jar には org.json ライブラリのスタブ関数が含まれているため、単体テストで例外がスローされます。これが私がしていることです

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

jar の順序のため、sbt 内でテスト コマンドを実行する間、このファイルは無視されます。コマンドを入力すると、最初のjarとしてandroid.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

を使用する代わりに、 を<+=使用し、それ自体を依存関係として<<=取得し、必要に応じて変更します。ドキュメントunmanagedClasspathには、次のような例があります。resolvers

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

このように、localMavenで最初に終了しresolversます。

API docsによると、これunmanagedClasspathTaskのタイプ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

unmanagedClasspath の代わりに unmanagedJars をオーバーライドすると、これが可能になる場合があります。

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

于 2013-08-30T06:22:58.773 に答える