2012-07-25 76 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了解详情。