播放2.0和SNAPSHOT依赖项

时间:2012-07-25 06:19:13

标签: scala playframework playframework-2.0 sbt ivy

我正在混合构建环境中设置我的第一个播放应用程序。我的公司使用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中有什么东西?

5 个答案:

答案 0 :(得分:5)

@kheraud - >清理/重新加载/更新 - >不管用 sbt缓存它本地并且不再检查本地maven中的新快照

@dprat - >我一直在寻找网络解决方案,还没有找到更多:( 我放弃了 - 只需删除常春藤缓存中的本地包,然后执行play update 你可以简化它并制作一个脚本

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

答案 1 :(得分:2)

在其他地方,我看到这归因于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会将您的资源放在那里。

然后在剧中使用

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

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

答案 2 :(得分:1)

您可以使用:

  • play reload //重新加载当前的应用程序构建文件
  • play update //更新应用程序依赖项

在构建应用程序之前。我不知道你是否可以配置sbt来不缓存SNAPSHOT依赖项,但你可以编写构建过程的脚本来强制重新加载依赖项。

答案 3 :(得分:0)

我不确定这是如何运作的,但是&#34;另一个人告诉我&#34; - 是的,这是我对此的参考范围 - 清理&#34;存储库&#34;播放安装中的文件夹可能有所帮助。

我有一点&#34; refresh.sh&#34;执行此操作的脚本:

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

这似乎对我有用。在哪里&#34; / opt / play&#34;是您安装游戏设备的地方&#34; com.mycompany&#34;是你需要刷新的。

我并不是说这是对的,但如果没有别的办法可能值得一试。

答案 4 :(得分:0)

从sbt版本0.13.6(2014年8月)开始,可以在updateOptions中使用构建设置标记Build.scala/build.sbt来控制SNAPSHOT分辨率。

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

有关此新功能的文档是here

github上的相应pull request了解详情。