Play 2.3.7 sbt 多项目编译问题

Play 2.3.7 sbt multiproject compiler issue

我们正在使用 Play 框架 2.3.7 并使用 sbt(sbt 版本 0.13.5)设置了一个多项目,它由四个模块组成。 在项目根目录的 build.sbt 文件中,我们定义了模块:

lazy val common = (project in file("modules/common")).enablePlugins(PlayJava, SbtWeb)

lazy val store = (project in file("modules/store")).enablePlugins(PlayJava, SbtWeb).dependsOn(common)

lazy val catalog = (project in file("modules/catalog")).enablePlugins(PlayJava, SbtWeb).dependsOn(common)

lazy val backend = (project in file("modules/backend")).enablePlugins(PlayJava, SbtWeb).dependsOn(common)

lazy val root = (project in file(".")).enablePlugins(PlayJava, SbtWeb).aggregate(common, store, catalog, backend).dependsOn(common, store, catalog, backend)

如果我们尝试 运行 我们的应用程序

activator run

它编译应用程序没有错误。在主页上的第一个请求之后,它再次开始编译整个项目……最多四次。 这需要很长时间,但之后一切正常。

那是什么原因,项目编译那么频繁?还有其他人偶然发现了这个问题吗?

谢谢。

在更新到 2.3.7 with ebean persistence-layer 后,我的项目出现了同样的问题。

我注意到 一些 类 总是被重新编译 尽管没有对它们进行任何更改。这只发生在使用注释 @com.avaje.ebean.annotation.Transactional.

@Entity-类 上

不幸的是,使用注释 @play.db.ebean.Transactional 是行不通的,它不会在单个事务中执行数据库命令。不确定,里面是否有 still a bug,或者 对 controller-类 有效,但对 @Entity-[=34= 无效].

然而,为我解决问题的是使用 try/finally 块创建交易,如 ebean-documentation.

中所述

你碰巧使用ebean作为持久层吗?

删除 @transactional-annnotation 是否解决了您的问题?