【问题标题】:Play Framework Project: How to include plugin from sourcePlay Framework Project:如何从源代码中包含插件
【发布时间】: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 的新手,我很难在网上找到有用的资源。任何帮助,将不胜感激。

【问题讨论】:

    标签: scala playframework sbt playframework-2.2


    【解决方案1】:

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

    您需要在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)中访问。

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2019-02-15
      • 2022-11-14
      • 1970-01-01
      • 2022-10-20
      相关资源
      最近更新 更多