Play Framework Project:如何从源代码中包含插件

Posted

技术标签:

【中文标题】Play Framework Project:如何从源代码中包含插件【英文标题】:Play Framework Project: How to include plugin from source 【发布时间】:2015-06-01 10:46:53 【问题描述】:

背景: 我正在将 TypeScript 集成到 Play Framework (2.2.6) 中,并且我正在尝试使用 mumoshu 的插件来做到这一点。问题是,插件在 Windows 机器上运行“play dist”时出现问题。 我从 GitHub 分叉了代码,以便对源代码进行一些修改,以便我可以继续使用该插件。

问题: 我有一个传统源码结构的play框架插件:

project/build.properties
project/Build.scala
project/plugins.sbt
src/main/scala/TypeScriptPlugin
src/main/scala/TypeScriptKeys.scala
...<other code>

我想将此插件包含到另一个项目中,但我真的不知道从哪里开始以及如何连接设置。

根据之前的建议,我已经能够将模块添加到我的项目中,如下所示:

// In project/Build.scala...
object ApplicationBuild extends Build
    lazy val typeScriptModule = ProjectRef(file("../../../play2-typescript"), "play2-typescript")

    lazy val main = play.Project(<appName>, <appVersion>, <appDependencies>).settings(typescriptSettings: _*).dependsOn(typeScriptModule).aggregate(typeScriptModule)

typescriptSettings 是在另一个项目中定义的...我想,我仍然不能 100% 确定 typescriptSettings 是什么,除了添加此设置调用使插件能够工作。当我将插件包含在plugins.sbt 文件中并导入包com.github.mumoshu.play2.typescript.TypeScriptPlugin._ 时,这最初工作得很好,但现在我包含了源代码并明确包含了模块,我不能只导入包......或者至少不像我以前那样。

我还是 scala/sbt 的新手,我很难在网上找到有用的资源。任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:

假设在同一个父目录中有两个目录:

play2-typescript: 是mumoshu's play2-typescript 的克隆 play2-typescript-testapp:这是您测试更改的应用程序

您需要在play2-typescript-testappproject 目录中创建一个文件,如下所示:

play2-typescript.sbt

val metaBuild = (project in file(".")
  dependsOn ProjectRef(file("../../play2-typescript"), "play2-typescript")
)

注意:

相对路径是play2-typescript插件项目,相对于play2-typescript-testapp内的project目录。

将其更改为您的设置中正确的内容,并考虑您也可以将其定义为绝对路径。

【讨论】:

这似乎构建得很好,但我不知道如何为包含的模块设置任何设置。同样,仍然习惯于 SBT 设置。 例如我之前通过根项目设置插件设置.settings(typescriptSettings: _*) 我想我仍然需要这样做才能让它工作,但不知道如何设置它。 绝对,这只是让你的测试应用程序设置依赖于你的插件分支的来源,然后你像往常一样做所有事情:在 build.sbt 的根目录下配置你的游戏项目测试应用。 这就是令人困惑的事情。我在 Build.scala 文件中使用 .settings(typescriptSettings: _*) 但它找不到 typescriptSettings 因为它是在另一个项目中定义的。但是,我也无法导入该项目中定义的包。我将更新问题描述以更好地反映我的“测试”项目。 所以我解决了这个问题。问题是项目需要像这样加载到 plugins.sbt 文件中:lazy val root = project.in(file(".")).dependsOn(typescript) lazy val typescript = file("../modules /打字稿");鉴于此负载,我能够导入正确的外部包并在 Build.Scala 文件中配置正确的设置。感谢您的所有帮助!【参考方案2】:

有很多这样的激活器模板示例。我有一个项目,我们遵循https://typesafe.com/activator/template/play-multidomain-auth 路径。具体来说,解决您的问题;根项目 play-multidomain-auth/project/ 中的插件可在模块(play-multidomain-auth/modules/admin/、.../common 和 .../web)中访问。

这个例子是我在使用多项目设计时见过的最干净的例子,但是这种观点非常主观。

我希望这会有所帮助。

【讨论】:

以上是关于Play Framework Project:如何从源代码中包含插件的主要内容,如果未能解决你的问题,请参考以下文章

将项目升级到 Play Framework 的 2.2.0 版本

Scala Play Framework Slick 会话不起作用

sbt compile play framework 应用错误

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

将 Play Framework 标签提交到 SVN 并触发提交挂钩

Play Framework:如何不查看文件夹以了解 Play Framework 中的更改