Lombok与Play Framework 2的集成怎么样? 我非常喜欢Lombok它使我的代码更具可读性和更少的样板。 Play Framework也很精彩。但是如果要混淆它们的话会有很大的麻烦。
主要原因是在域类之前编译的play项目中的scala temlates。所以Lombok,它本身就是编译器的黑客,在那个时候不生成访问器。
问题是:是否有任何方法可以使其发挥作用?
我在Google Groups中找到了一些讨论,但他们没有提供任何合理的解决方案。那你有成功吗?
并且..为什么来自Play Framework项目的人不提供类似Lombok的解决方案?无论如何,Play充满了代码生成魔法和阴影编译...所以,为什么不呢?
答案 0 :(得分:4)
因此,解决方法相当简单,并在google groups中提出,但文档中有一些含糊不清的内容,我将逐步描述应该做什么。
<强> 1。逻辑上隔离您的域模型
这意味着域类不应该从视图或控制器中调用任何内容。
<强> 2。创建包含域类的子项目
给出了here的一些信息。子项目与默认播放的项目非常相似,并且创建它并不那么难。我从play的控制台找不到任何工具,所以你需要手工创建一些文件夹。
首先在主项目的文件夹中创建子项目文件夹。我们假设您将其命名为 domain-data 。接下来,创建所需的文件夹,如standart app. layout中所述。在大多数情况下,您希望在创建的子文件夹中创建简单的目录树:
app
└ models
└ myclasses
现在将所有域类移动到子项目的目录树中。
<强> 3.Configuration 强>
配置将很简单。移至主项目的项目文件夹,然后打开 Build.scala 文件。这是SBT构建系统的构建脚本。
首先定义一些依赖项。将以下字符串添加到构建文件中:
val domainDependencies = Seq(
"org.projectlombok" % "lombok" % "0.11.4"
)
这会将Lombok的jar添加到您的子项目中。现在创建子项目定义:
val domainProject = PlayProject(
"domain-data", appVersion, domainDependencies, path=file("domain"), mainLang=JAVA
)
路径应指向子项目的文件夹。
最后一步是更新主项目配置,使其依赖于子项目。依赖将需要在每个主要项目重建时进行子项目重建。
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).dependsOn(domainProject)
在终端中给出 play 命令启动主项目后,输入 projects 命令。你应该看到你的新子项目。
<强> 4。利润强>
现在是时候使用Lombok安全地重构现有代码了。
答案 1 :(得分:0)
我的应用程序是“conseillers”(Play 2.2.1项目),我的模型是/ app / models中的“Conseiller.java”
a)只需创建两个文件夹并将“/ app / models”文件夹移动到新的子文件夹:/ models / app / models
b)将新的build.sbt文件添加到此新文件夹中
c)使用.dependsOn修改根应用程序文件夹中的build.sbt(不确定.aggregate是否100%是必需的):
d)检查,编译,运行