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 多项目构建:针对不同子项目的 2 个不同版本的 sbt play 插件