2012-07-25 75 views
14

我在混合構建環境中設置了我的第一個播放應用程序。我的公司對所有東西都使用maven(到目前爲止),我試圖讓我的遊戲應用與我的其他工件很好地交互。播放2.0和SNAPSHOT依賴關係

是否有任何方式讓ivy/sbt/play以類似於maven的方式處理SNAPSHOT - 即,或者從遠程存儲庫始終更新它們(例如,在構建工作者上)或使用本地。 m2存儲庫,直到依賴項'過期',然後從服務器刷新它。

我已經在我的Build.scala中爲一個工件聲明瞭一個SNAPSHOT依賴項,並且我希望對此依賴項的本地更新對我的播放項目可見。在Maven的一面,我做了以下

mvn clean install 

(當然),其製造和安裝我的外部神器我的本地倉庫(在〜/ .m2目錄/庫)。我希望這些更改能夠立即在我的播放項目中可見,但我無法弄清楚如何告訴sbt/play不緩存SNAPSHOT。無論我做什麼,這種依賴都不會在遊戲中刷新 - 我必須進入實際的常春藤緩存並手動刪除依賴關係,以便進行任何更改。理想情況下,我希望sbt/ivy只解析我的本地maven repo的路徑,而不是在內部緩存它。我有以下我Build.scala

val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    resolvers += "Local Maven Repository" at "file://" + Path.userHome.absolutePath + "/.m2/repository", 
    testOptions in Test := Nil 
) 

當我在遊戲運行構建,它正確地使用此回購,但隨後緩存在常春藤緩存的結果。有沒有咒語我可以告訴艾維/ sbt不要這樣做?也許在ivysettings.xml中有什麼?

+0

你嘗試玩玩乾淨嗎? – 2012-07-25 15:18:10

+0

是否http://stackoverflow.com/questions/8224907/re-download-a-snapshot-version-of-a-dependency-using-sbt有幫助? – 2012-07-27 05:50:01

+1

是的 - 我嘗試了所有我能想到的組合。香草播放2.0安裝緩存SNAPSHOTS,你必須手動刪除它們。使用sbt 0.11(沒有安裝play)也一樣。此外,使用sbt 0.12和最新的Play 2.1 SNAPSHOT也展現了這一點。無論我做什麼,SNAPSHOT都緩存在〜/ .ivy2/cache中,任何sbt/play咒語都不會導致sbt/play在常春藤緩存中更新此SNAPSHOT。 – dpratt 2012-09-04 16:28:59

回答

1

您可以使用:

  • play reload //刷新當前的應用程序構建文件
  • play update //更新應用程序相關

構建應用程序之前。我不知道你是否可以配置sbt來緩存SNAPSHOT依賴項,但是你可以編寫你的構建過程來強制重新加載依賴項。

5

@kheraud - >潔淨/恢復/更新 - >將無法正常工作 SBT localy緩存它並沒有爲新的快照再次檢查在本地Maven

@dprat - >我一直在尋找在網絡解決方案並沒有發現任何東西:( 我放棄了 - 只是刪除您的本地包常春藤緩存和不play update 可以將其簡化,使腳本

rm -rf ~/.ivy2/cache/your.package.foo 
play update compile 
2

在其他地方我已經看到了這個衝高的SBT缺陷https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

一個解決方案似乎是使用Nexus。你將不得不從Maven部署到連接。你將不得不使用nexus路徑而不是mvn。你將不得不安裝和運行nexus!

要安裝nexus去sonatype和下載。觀看文件權限(閱讀說明),但很簡單。您需要將憑證放置在〜/ .m2/settings.xml中。默認是admin,admin123。

<settings> 
    <servers> 
    <server> 
     <id>snapshots</id> 
     <username>admin</username> 
     <password>admin123</password> 
    </server> 
    </servers> 
</settings> 

maven deploy是nexus給你的,例如,:

<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <url>http://0.0.0.0:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

然後mvn deploy會把你的資源放在那裏。

然後在劇中SBT使用

resolvers += "Local Nexus Repository" at "http://0.0.0.0:8081/nexus/content/repositories/snapshots" 

您仍然需要停止播放,使用遊戲更新,並重新啓動遊戲。

0

我不確定這是如何工作的,但「另一個人告訴我」 - 是的,這是我的參考程度 - 清除播放安裝中的「存儲庫」文件夾可能會有所幫助。

我有一點點「refresh.sh」的劇本,這是否:

rm -rf /opt/play/repository/cache/com.mycompany 
play clean 
play update 
play run 

這似乎爲我工作。其中「/ opt/play」是你玩遊戲安裝的地方,「com.mycompany」是你需要刷新的地方。

我並不是說這是對的,但如果沒有其他作用,它可能值得拍攝。

0

截至sbt版本0.13.6(2014年8月),可以使用版本設置標誌updateOptions中的Build.scala/build.sbt來控制SNAPSHOT分辨率。

updateOptions := updateOptions.value.withLatestSnapshots(false/true) 

有關這一新功能的文檔是here

通訊在github pull request瞭解詳情。