2015-07-09 83 views
1

我正在dockerizing我的Play!框架應用程序和目前,我的構建需要超過15分鐘才能完成。這個過程的很大一部分,實際上是下載依賴關係,因爲我的構建器沒有高速緩存的概念。我認爲,將我的項目需要的所有依賴項複製到本地文件夾是一個不錯的主意,因此它不必一次又一次地下載所有內容。但問題是,我不知道該怎麼做?我知道SBT有一個功能,可以讓你指定一個本地回購,但我不知道一個功能,允許我將所有內容複製到某個文件夾。將所有SBT依賴項複製到本地文件夾

回答

3

更新(2015-07-12):

好了,你想是保持所有依賴你想要的文件夾中的內容,你可以試試這個當您運行SBT,

sbt -Dsbt.ivy.home=/your/local/path/.ivy 

然後它會保留所有依賴關係文件或下載的任何文件以構建您的應用程序/your/local/path/.ivy/cache

如果你想保持他們在你的項目,

sbt -Dsbt.ivy.home=/some/path/to/your-project/.ivy 

這些文件會被保存在文件夾/some/path/to/your-project/.ivy/cache

順便說一句,碼頭不支持緩存?嗯,你爲什麼不嘗試一些很好的CI服務,如Semaphore CI,並讓它部署你的應用程序到Docker? (我沒有與Semaphore建立任何個人或任何其他連接,這只是我使用的服務,我嘗試過五種不同的CI工具,並且最喜歡那種工具)。

更新(2015-07-12):哦,對不起,你的問題不是關於使用本地回購,而是複製一切到它。

這可能不完全是你問的,但可以解決你的問題。

updateOptions := updateOptions.value.withCachedResolution(true) 

注意:這是一個實驗性功能。

詳情:sbt doc - Cached-Resolution

======================================= ========

您可以通過

resolvers += name at location 

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" 

所以對於本地Maven回購,你可以簡單地做

指定庫
resolvers += Resolver.mavenLocal 

然而,在我的情況下,當我這樣做,它試圖訪問PROJECT_HOME/{user.home}/.m2/repository這是不正確的。

我想要的是$HOME/.m2/repository這是maven本地存儲庫的位置。所以我把下面這行放在build.sbt而不是Resolver.mavenLocal,它似乎工作。

resolvers += "mavenLocal" at s"${sys.props("user.home")}/.m2/repository" 

詳情:sbt doc - Library-Dependencies

+0

我還沒有看到任何功能,允許我完全下載所有的依賴關係。這就是我所追求的。還是謝謝你的答案。 – Martijn

+0

@MartijnR那麼我在build.sbt'resolvers + =「mavenLocal」在s「$ {sys.props(」user.home「)} /。m2/repository」''中執行此操作,並且它似乎沒有下載當它在'mavenLocal'處找到它們時再次依賴庫。 –

+0

是的,問題是。我使用的是docker,意思是沒有保存緩存。而複製我的整個maven緩存將是愚蠢的,因爲它包含了很多不相關的東西。 :( – Martijn

相關問題