我在VirtualBox VM上运行Play框架应用程序,项目源代码位于从主机系统共享的目录中。框架的自动重新加载功能不起作用。
这可能是由于JNotify无法检测到源文件的更改而导致的,因为文件系统不是本地的。 NFS和vboxsf都遇到同样的问题。
有什么方法吗?
Play框架具有内置的回退机制,用于检测JNotify不可用的系统上的更改。有可能以某种方式强制选择后备机制吗? (性能打击是可以接受的。)
还有其他解决方案吗?
答案 0 :(得分:3)
我遇到了同样的情况。在Play / SBT控制台中切换到~run
(而不是run
)绕过JNotify(根据Josh Suereth的说法)并且似乎为我解决了这个问题。
答案 1 :(得分:1)
回答我自己的问题:似乎没有一种直接的方法来实现这一点,并且看起来这种功能在不久的将来不会在网络文件系统中出现。
破解Play框架的sbt插件并使PlayReloader特性表现得好像JNotify不可用,这是相当微不足道的,但至少可以说这是一个肮脏的黑客。
最好的解决方案似乎是将Play应用程序从VM移开并在主机上运行,即使完全自动配置的开发环境的某些优点会丢失。
答案 2 :(得分:1)
根据James Roper的说法,如果您使用的是游戏2.3.2或更高版本,则可以将以下内容添加到build.sbt中:
PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value)
James Roper对此问题的完整回复是the link。