Play 2.3.7 sbt 多项目编译器问题

Posted

技术标签:

【中文标题】Play 2.3.7 sbt 多项目编译器问题【英文标题】:Play 2.3.7 sbt multiproject compiler issue 【发布时间】:2015-03-15 05:23:06 【问题描述】:

我们使用的是 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

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

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

谢谢。

【问题讨论】:

【参考方案1】:

更新到使用 ebean 持久层播放 2.3.7 后,我的项目中遇到了同样的问题。

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

不幸的是,使用注释@play.db.ebean.Transactional 不起作用,它不会在单个事务中执行数据库命令。不确定,其中是否有still a bug,或者这适用于控制器类,但不适用于@Entity-类。

但是为我解决了这个问题的是,使用try/finally 块来创建事务,如ebean-documentation 中所述。

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

删除@transactional-annnotation 能解决您的问题吗?

【讨论】:

以上是关于Play 2.3.7 sbt 多项目编译器问题的主要内容,如果未能解决你的问题,请参考以下文章

默认禁用 play framework 2.x 的 SBT 编译

未解决的依赖关系:sbt-plugin;2.7.0 尝试编译播放模板项目时

与证书相关的 SBT 项目编译错误

SBT 多项目构建:针对不同子项目的 2 个不同版本的 sbt play 插件

SBT/Play2 多项目设置在运行/测试的类路径中不包括依赖项目

如何在 Play Framework 中进行详细编译?