2013-08-30 4 views
0

Я использую android-sbt-plugin с sbt, и я хотел бы добавить неуправляемую банку к тестовому пути. Причина того, что android.jar содержит функции заглушки для библиотек org.json и приводит к исключениям, которые бросаются для модульных тестов. Это то, что я делаюВ любом случае, чтобы добавить банку к unmanagedClasspath в sbt

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

Из-за порядка баночки этот файл игнорируется во время, когда я запустить команду тестирования в SBT. Если я набираю команду порядок ясно показывает android.jar как первую баночку

шоу тест: неуправляемые- путь к классам [Информация] ArrayBuffer (Приписываемый (/ дом/Рохит/Проекты/Android-SDK-Linux/платформы/android- 17/android.jar), приписываемый (/home/rohit/Projects/barfrendz/trunk/src/buzze/test-libs/json.jar))

Если я создаю Lib папку и пусть sbt возьмет json jar, порядок отменен, теперь тесты уже запущены, но я больше не могу создавать пакет android из-за конфликтов с пространством имен org.json в android.jar. Вот исключение

[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)) 

Есть ли способ изменить порядок банок в пути к классам для модульных тестов?

ответ

0

Вместо использования <+= используйте <<=, получить unmanagedClasspath себя как зависимость, а затем изменить его по своему желанию. documentation имеет такой пример с resolvers:

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

Таким образом, localMaven заканчивается первым в resolvers.

Согласно API docs, unmanagedClasspath является Task типа Classpath. Обратите внимание, что при использовании этого синтаксиса вы меняете Classpath, а не Task.

API-интерфейс док для here путь к классам - это 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 
} 

[email protected] /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 
> 
+0

Это то, что я хочу, однако класс Task [] не имеет оператора +:. Если я найду что-то эквивалентное, я отправлю его здесь – Rohit

+0

@Rohit Совет, который я дал, работает. Я добавил дополнительную информацию в ответ. –