2013-12-09 43 views
1

我想我的SBT版本升級從0.12.3至0.13.0,但它試圖加載一個項目,我得到下面的錯誤後的成員:在行,其中發生!是不是字符串

! is not a member of String 

錯誤我執行外部命令:

("tar cf " + (buildRoot/"SOURCES").toString + "/" + ver + ".tar -C " + buildRoot.toString + " dir").! 

在以前的版本中一切都很好。

有沒有人知道我在做什麼錯或在最新版本中發生了什麼變化?

編輯:問題已解決。它需要添加:

import sbt.Process._ 

的對象,其中你想使用postfixOps例如:

val success:Int = ((dir/"script.sh" toString) !) 
+3

在你的代碼中'(「tar cf」+ ...)。!'之前有'import scala.sys.process._'嗎? – senia

+0

當然可以。 – mickiewicz

+0

作爲一種風格問題,我寧願明確地編寫'Process(myString)。!',而不是使用implicits來寫'myString。!'。我想,這是一個品味的問題,但我認爲對於閱讀我的作品的人來說,明確表示會更友善。 –

回答

3

的!命令(對於進程)來自sbt's process API或來自Scala的。

如果你打算使用SBT的記錄與派生(強烈推薦),那麼你要確保你import sbt.Process._

此外,您proabbly想擁有你的代碼看起來更像:

val logger: sbt.Logger = ??? //(usually streams.value.log) 
val success:Int = (dir/"script.sh" toString) ! logger 
+0

你是絕對正確的,但是在我添加'import sbt.Process._'之前!命令不起作用,即使我有'import scala.sys.process._' – mickiewicz

+0

怎麼樣「import sbt._」或者什麼從 http://www.scala-sbt.org/0.13.0/docs /Detailed-Topics/Console-Project.html? – dk14

+0

是的,'import sbt._'應該也可以。 – jsuereth