2013-03-08 53 views
10

我的一個項目將提供一個應用於其他幾個項目的單元測試的jar包。到目前爲止,我設法制作了一張objects-commons_2.10-0.1-SNAPSHOT-test.jar,並將其發佈在我的存儲庫中。如何在SBT中解決我自己的測試工件?

但是,我找不到一種方法告訴sbt在其他項目中使用該測試範圍的工件。

在我的build.scala中添加以下依賴項不會加載測試工件。

"com.company" %% "objects-commons" % "0.1-SNAPSHOT", 
"com.company" %% "objects-commons" % "0.1-SNAPSHOT-test" % "test", 

我需要做的是使用默認的.jar文件的編譯和運行時的依賴和-test.jar在我的測試範圍依賴。但不知何故,sbt從不嘗試解決測試瓶。

回答

14

如何使用測試工件

要允許發佈的測試工件時,主神器發佈你需要添加到您的庫build.sbt:

publishArtifact in (Test, packageBin) := true 

發佈您的神器。至少應該有兩個JAR:objects-commons_2.10.jar和objects-commons_2.10-test.jar。

要使用在運行時庫,並在測試範圍的測試庫添加下列行到主應用程序的build.sbt:

libraryDependencies ++= Seq("com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT" 
    , "com.company" % "objects-commons_2.10" % "0.1-SNAPSHOT" % "test" classifier "tests" //for SBT 12: classifier test (not tests with s) 
) 

的第一個條目加載運行時庫,第二個輸入力「測試」工件僅在測試範圍中可用。

我創建了一個例子項目:

git clone [email protected]:schleichardt/stackoverflow-answers.git --branch so15290881-how-do-i-resolve-my-own-test-artifacts-in-sbt 

或者你也可以直接在github上查看the example

+0

這種方法可能無法解決測試jar的傳遞依賴問題。因此,在添加'publishArtifact'行之後,最好使用[從文檔中正式推薦的方式](http://stackoverflow.com/a/8194192/495796)。如果它仍然不起作用,那麼從Maven風格切換到Ivy風格發佈(使用Ivy風格的存儲庫)應該可以工作。 – 2015-08-05 15:37:04

-1

如果你像這樣改變name,它會正常工作。

"com.company" %% "objects-commons" % "0.1-SNAPSHOT", 
"com.company" %% "objects-commons-test" % "0.1-SNAPSHOT" % "test", 
+0

不適用於我。已發佈的工件將存儲在/com/company/objects-commons_2.10/0.1-SNAPSHOT/objects-commons_2.10 -0.1-SNAPSHOT-test.jar中,但您的建議預計會在/ com/company/objects-commons-test_2.10/0.1-SNAPSHOT/objects-commons-test_2.10-0.1-SNAPSHOT.pom不存在。 – 2013-03-08 11:14:39

+0

我的意思是說,如果可能的話,你應該從對象通用名稱改爲對象通用名稱。這些圖書館是否在你的團隊的控制之下?如果是這樣,那太糟糕了...... – 2013-03-08 11:23:22

+0

這是無稽之談 – lisak 2014-12-03 11:40:11

1

你的問題是,sbt認爲你的兩個罐子是相同的神器,但具有不同的版本。它採用「最新」,即0.1-SNAPSHOT,並忽略0.1-SNAPSHOT測試。這與您會看到的行爲相同,例如您有0.1-SNAPSHOT和0.2-SNAPSHOT。

我不知道這兩個罐子裏有什麼,但是如果你希望他們都在類路徑上,這就是你想要做的,那麼你需要改變測試的名字正如Kazuhiro所建議的那樣,將物品交給物品共同測試。看起來這對你來說應該很容易,因爲你已經把它放在回購站裏了。

相關問題