簡體   English   中英

播放2.0和SNAPSHOT依賴項

[英]Play 2.0 and SNAPSHOT dependencies

我正在混合構建環境中設置我的第一個播放應用程序。 我的公司使用maven來處理所有事情(到目前為止),我正在努力讓我的播放應用程序與我的其他工件很好地交互。

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

我在Build.scala中為一個工件聲明了一個SNAPSHOT依賴項,我希望這個依賴項的本地更新對我的play項目可見。 在maven方面,我做了以下幾點

mvn clean install

其中(當然)構建並將我的外部工件安裝到我的本地maven存儲庫(在〜/ .m2 / repository)。 我希望我的播放項目能立即看到這些更改,但我無法弄清楚如何告訴sbt / play不緩存SNAPSHOT。 無論我做什么,這種依賴關系永遠不會在游戲中刷新 - 我必須進入實際的游戲常春藤緩存並手動刪除依賴關系以獲取任何更改。 理想情況下,我希望sbt / ivy只是解析我本地maven倉庫的路徑,而不是在內部緩存它。 我的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
)

當我在游戲中運行構建時,它正確使用此repo,但隨后將結果緩存在常春藤緩存中。 有沒有咒語我可以告訴Ivy / sbt不這樣做? 也許在ivysettings.xml中有什么東西?

@kheraud - >清理/重新加載/更新 - >不會工作sbt緩存它本地並且不再檢查本地maven中的新快照

@dprat - >我一直在尋找網絡解決方案,還沒有找到更多:(我放棄了 - 只需刪除你在常春藤緩存中的本地包,並play update你可以簡化它,並制作一個腳本

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

在其他地方,我看到這歸因於SBT缺陷https://groups.google.com/forum/?fromgroups=#!topic/play-framework/O7_cAdUWQII

一種解決方案似乎是使用Nexus。 您將不得不從maven部署到nexus。 您將不得不使用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部署由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"

您仍然需要停止播放,使用播放更新,然后重新開始播放。

您可以使用:

  • play reload //重新加載當前的應用程序構建文件
  • play update //更新應用程序依賴項

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

我不確定這是如何工作的,但是“另一個人告訴我” - 是的,這是我對此的引用程度 - 清除播放安裝中的“repository”文件夾可能有所幫助。

我有一個“refresh.sh”腳本,它執行此操作:

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

它似乎對我有用。 其中“/ opt / play”是您安裝游戲的地方,“com.mycompany”是您需要刷新的地方。

我不是說這是對的,但如果沒有別的辦法,它可能值得一試。

從sbt版本0.13.6(2014年8月)開始,可以在Build.scala/build.sbt使用構建設置標志updateOptions來控制SNAPSHOT分辨率。

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

有關此新功能的文檔在此處

github上的相應pull請求有關詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM