2013-08-30 33 views
0

我正在使用android-sbt-plugin與sbt,我想添加一個非託管的jar到測試類路徑。原因是android.jar包含org.json庫的存根函數,並導致單元測試拋出異常。這是當我在SBT內運行測試命令時我在做什麼是否有預先給jar的非託管類路徑在sbt

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

因爲此文件被忽略的罐子的順序。如果我鍵入命令的順序清楚地顯示了作爲的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.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)) 

是否有反正我可以改變單元測試的類路徑中的罐子的順序?

回答

0

而不是使用<+=的,使用<<=,得到unmanagedClasspath本身作爲一個相關性,然後根據需要修改它。該documentation具有這樣的示例中與resolvers

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

這樣,在localMaven第一resolvers結束。

根據API docsunmanagedClasspath是類型ClasspathTask。請注意,當您使用該語法時,您正在更改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我給出的建議確實有效。我在答案中增加了更多信息。 –