Play Framework:合并多模块项目中的多个全局对象

2024-02-28

我正在使用 Play 2.3 和 Java 8 构建一个多模块项目。根应用程序和每个模块都有一个全局对象。但我们如何知道 Play 仅使用根应用程序中的一个全局对象。

简化的文件夹结构:

/root
    /app
        Global.java
    /conf
        application.conf
    /subprojects
        /user
            /app
               UserGlobal.java
        /admin
            /app
               AdminGlobal.java

所有全局类都放置在未命名的包中。

我使用这种方式来合并子项目中的全局对象:

1)在root中声明配置变量应用程序配置文件

subprojects.with.globals="subprojectName1, subprojectName2, subprojectName3, ..."

2)在root中添加私有字段和私有方法全局.java

private List<GlobalSettings> subprojectGlobals = new ArrayList<>();

private void LoadSubprojectGlobals(Application app)
    throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
    String subprojectNames = 
        app.configuration().getString("subprojects.with.globals");
    if (!subprojectNames.isEmpty())
    {
        Class subprojectGlobalClass = null;
        for (String subprojectName : subprojectNames.split(","))
        {
            subprojectGlobalClass = Class.forName(
                WordUtils.capitalize(subprojectName.trim().toLowerCase()) +
                "Global"
            );
            subprojectGlobals.add(
                (GlobalSettings)subprojectGlobalClass.newInstance()
            );
        }
    }
}

3)将这样的代码放入onStart根中的事件处理程序全局.java

@Override
public void onStart(Application app)
{
    try
    {
        LoadSubprojectGlobals(app);
    }
    catch(Exception e)
    {
        new RuntimeException(e);
    }

    for(GlobalSettings subprojectGlobal: subprojectGlobals)
    {
        subprojectGlobal.onStart(app);
    }
}

现在,如果我们添加一些新的子项目,我们必须编辑子项目.with.globals在根应用程序配置文件。如果我们想处理更多全局设置,我们需要重写 root 中适当的方法全局.java.

如果我们能够从根目录中的 java 代码动态确定所有子项目名称,那就太酷了onStart。是否可以?可能是从根开始构建.sbt或者来自应用程序对象?

UPDATE

我应用@Mon Calamari 的方法改变了我的项目。

1) 删除了配置变量子项目.with.globals从根开始应用程序配置文件.

2)将所有子项目Global类放入globals包裹:

/subprojects
    /user
        /app
            /globals
                UserGlobal.java
    /admin
        /app
            /globals
                AdminGlobal.java

3)将配置变量添加到所有子项目conf文件中,例如

application.global= globals.UserGlobal

4)改变加载子项目全局()执行:

private void LoadSubprojectGlobals(Application app)
    throws ClassNotFoundException, IllegalAccessException, InstantiationException
{
    Reflections reflections = new Reflections("globals");
    Set<Class<? extends GlobalSettings>> subprojectGlobalClasses = 
        reflections.getSubTypesOf(GlobalSettings.class);

    for(Class subprojectGlobalClass : subprojectGlobalClasses)
    {
        subprojectGlobals.add(
            (GlobalSettings)subprojectGlobalClass.newInstance()
        );
    }
}

现在,如果我们添加一些新的子项目,我们必须遵循一些有关添加全局类的约定,但我们不需要跟踪子项目列表。

多谢。


我不确定你的模块/包是如何排列的,但是如果你使用怎么办org.reflections获取所有扩展名play.GlobalSettings class:

Reflections reflections = new Reflections("your.package");    
Set<Class<? extends GlobalSettings>> classes = reflections.getSubTypesOf(GlobalSettings.class)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play Framework:合并多模块项目中的多个全局对象 的相关文章

  • 播放更改RUNNING_PID文件路径

    我试图将 RUNNING PID 文件存储在 var run 而不是根目录 尝试了以下建议的所有选项 关于这个主题的另一个问题 https stackoverflow com questions 28351405 restarting pl
  • 如何在Play Framework的配置文件中使用“war.context”?

    如何在Play Framework的配置文件中使用 war context 请查看 Google 网上论坛上的此帖子 了解您所问问题的描述 http groups google com group play framework browse
  • 获取一个 url 参数的数组

    我想获取 url param id 但它不起作用 这里每个人都可以帮助我吗 下面的代码不起作用 Url http localhost 9000 rest alerts ids 123 ids 456 路由配置文件 GET restws al
  • 升级Java后找不到Sun.security

    我有一个使用 Play 2 0 创建的应用程序 我实现了 scribe java 库来使用一些 OAuth 服务 直到今天一切都很好 但是当我升级 jdk 并重新启动服务器时 我无法使用 scribe java 库 似乎它使用了一些类 例如
  • 如何将 Play 与自定义模块和持续集成结合使用

    如何在 CI 系统中设置 Play 应用程序和 自定义 Play 模块的构建 以便当模块的构建良好时 构建会将模块工件安装在本地存储库中和 或将它们部署到远程存储库 并且应用程序使用该存储库中的工件 该解决方案也应该适合在本地工作的开发人员
  • Akka 的语言和产品替代品是什么?

    现在我正在看游戏框架 https www playframework com 并且非常喜欢它 Play 中提供的功能中最受宣传的部分之一是Akka http akka io 为了更好地理解 Akka 以及如何正确使用它 您能告诉我其他语言或
  • 安装 play 框架 mongodb morphia 模块

    我正在使用以 mongodb 作为后端的 play 框架进行应用程序开发 我已经在我的 ubuntu 和 windows 上成功安装了 mongodb 和 playframework 但是如果我想使用 mongodb 我需要 play 框架
  • 转换回原始类时出现 ClassCastException 错误

    我有以下代码 public void doJob MyObj s for Object o MyObj all fetch s MyObj o ClassCastException here if s fileExists Do some
  • DdlGenerator 构造函数不需要参数?

    我想对我的数据库操作进行单元测试 我发现这段代码 https gist github com nboire 2819920 但是 我收到以下错误 CityGame test info Compiling 2 Java sources to
  • 自动在资源顶部插入 ETag(资产指纹)作为注释

    如何要求 Play 在不使用第三方插件的情况下自动将文件的 ETag 作为注释插入到文件顶部附近 例如 对于 HTML 资源 插入在顶部 tag 关于如何使用 Play 框架的内置公共资产路由 指纹支持来做到这一点的答案也很棒 相关问题 用
  • 为什么 Scala 程序的编译速度非常慢?

    过去两个月我一直在使用 Scala 我还在一个小应用程序中使用 Play 框架 我观察到 即使对于打印 Hello World 的程序来说 编译也非常慢 为什么这么慢 有什么减少时间的技巧吗 您的情况下编译速度有多快 scalac 的速度受
  • 玩 Scala 和线程安全

    该项目是使用编写的Play framework and Scala语言 我已经实施了compile time dependency 我按照 Play 中的这个例子进行操作 https github com playframework pla
  • Intellij IDEA 无法使用 Play 框架解析符号

    我正在使用 IDEA 13 和 Play 2 2 1 并且正在做示例游玩地点 http www playframework com documentation 2 2 x JavaTodoList public static Result
  • Slick中的动态查询参数(排序)

    我正在尝试将异常查询转换为平滑查询Play 2 3 示例之一 https github com playframework playframework tree 2 3 x samples scala computer database 但
  • sbt-proguard 与 play 2.2.3

    我们使用 play 2 2 3 开发了一个 Web 应用程序 并希望对其进行混淆 我正在尝试使用sbt proguard https github com sbt sbt proguard插入 我把下面的行PROJECT FOLDER pr
  • sbt 程序集中的合并策略和缺少的应用程序加载器

    我正在开发一个 Play Web 应用程序 我希望能够使用 sbt 程序集将其部署为 fat jar 在调试中运行应用程序时 我可以识别 guice 库 因为它已添加到我的 build sbt 文件中 libraryDependencies
  • 在 Products.scala 中找不到 flash

    我目前正在阅读 Peter Hilton 的 Play for Scala 我刚刚结束了第一个示例 Play 应用程序 您可以在其中构建回形针目录 然而 在编译时 我收到一个编译错误 告诉我尚未找到值 flash 通常这是我犯的一个简单错误
  • Play 框架 2.0:在 Http.Context 中存储值

    我正在尝试在 Play 框架中的 scalaquery 中实现 基于请求 的会话 我使用 scalaquery 创建一个会话 并尝试将其存储在当前的 http 上下文中 如下所示 def withTransaction A bp BodyP
  • 如何访问 Play Guice 模块中的请求?

    我正在编写一个处理多个系统的应用程序 用户可以选择他想要使用的系统 我将该系统 ID 存储在会话 客户端会话 中 现在我有服务课程 比如说客户服务 class CustomerService val systemID String Impl
  • 用于真实 Web 项目的 Scala-JS [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人用过吗Scala JS在真实的网络项目中 但不仅仅适用于普通的JavaScript在隔离环境中替换 我想尽可能多地使用 Scala 我希望可

随机推荐

  • 我想在所有内容图像上应用 css class(bootstrap) .img-responsive

    我正在 bootstrap 的帮助下开发一个 Wordpress 主题 因此我手动将案例应用于所有内容图像 如下所示 img src images logo 03 png class img responsive 有没有办法自动应用相同的类
  • std::function 复制参数?

    My code include
  • C++中如何设计一个可以容纳任意类型函数的容器?

    我希望服务器支持注册任何功能 可能是这样的 server register Add int a int b cout lt lt a b lt lt endl server register Echo string str cout lt
  • 通过 Facebook 分享 Android 果冻豆的意图

    我想通过 Facebook 分享 Android jelly bean 的一些图像和文本 它适用于除 Android 果冻豆之外的所有设备 任何人请帮助我如何解决这个问题 my code Intent shareIntent new Int
  • ASPX 页面中“当前上下文中不存在该名称”

    我看过类似的问题 1 https stackoverflow com questions 706603 the name controlname does not exist in the current context 2 https s
  • URL 的编码参数

    我有一个正在构建 URL 的 Silverlight 应用程序 此 URL 是对基于 REST 的服务的调用 该服务需要一个代表位置的参数 位置的形式为 城市 州 为了构建此 URL 我调用以下代码 string url http www
  • AutoMapper 在映射子对象时传递父引用

    我正在尝试使用 AutoMapper 将从 Web 服务接收到的一些 DTO 数据契约 对象映射到我的业务对象中 根 DTO 对象包含子对象的集合 我的业务对象还有一个子业务对象的子集合 为了让 AutoMapper 工作 我必须在业务对象
  • 浏览器对 CSS :first-child 和 :last-child 的支持

    有谁知道哪些浏览器 版本支持它们 使用它们是否安全 或者我应该诉诸 PHP javascript 来生成第一个 最后一个类 first child and last child http www quirksmode org css fir
  • PHP 5.3 中自动加载命名空间?

    如何在 PHP 5 3 中使用 autoload 和命名空间 我在与脚本分开的命名空间中有一个主要的自动加载函数 我还调用具有不同名称空间的类 这并不奇怪 但是 它没有找到自动加载功能 我是否必须为每个命名空间重新创建自动加载函数 这似乎不
  • “Office 2010 加载项:图标库” - 如何从后台选项卡中提取图标 (docx)

    我下载了 Office 2010 加载项 图标库 https www microsoft com en in download confirmation aspx id 21103 这是一个 docx 文件 有两个包含图标的后台选项卡 如何
  • 在c#中将bool表达式转换为char

    当我遇到如下问题时 我通过了 NET 测验 Char ch Convert ToChar a e c a 在控制台中我们可以看到输出ch变量是g 有人可以描述发生了什么吗 谢谢 是二元或运算符 a binary representation
  • 将重复值复制粘贴到大型 Excel 文件的列中

    我遇到了一个问题 希望得到一些帮助 这是我现在正在处理的内容 我想要的是 B C 和 D 列复制到其下面的空白行 直到它到达新客户端 如下所示 非常感谢任何和所有的帮助 Thanks 非VBA解决方案 Select entire range
  • 使用 jQuery 按住 Shift + 鼠标悬停

    我试图检测当光标移动到特定元素上时是否按下了 Shift 键 该函数会触发 但仅after我首先单击另一个元素 有什么方法可以解决这个问题吗 我尝试将焦点设置为文档和元素 并尝试创建伪单击功能 但到目前为止没有任何效果 例如 以下代码仅在我
  • OpenCL clGetPlatformIDs 异常

    我使用此包安装附带的示例中的 HelloWorld 示例 AMD 套件 http developer amd com tools and sdks heterogeneous computing amd accelerated parall
  • SQL 调用临时表中的最大行数

    在临时表中只有两列可用 我想获取每次加载的最新ID 如下图所示 我已经尝试过 但它没有给我我需要的答案 select max rn plus 1 a load a id from select a load a id ROW NUMBER
  • 交互式 lua:命令行参数

    我想做 lua prog lua arg1 arg2 从命令行 在prog lua里面 我想说 比如 print arg1 arg2 n Lua 似乎没有 argv 1 等 而且我见过的处理命令行参数的方法似乎不成熟和 或麻烦 我错过了什么
  • 在 Express 中使用“jade”模板引擎时渲染“html”

    你如何渲染一个html文件 同时保持模板引擎为jade app set view engine jade 是我将模板引擎设置为jade我想做一些类似的事情 app get world function req res res render
  • Android:ScrollView 内的 Horizo​​ntalScrollView

    我有多个水平滚动视图里面一个滚动视图 水平滚动一点也不流畅 我必须几乎完全水平滚动才能滚动才能工作 有没有一个简单的修复方法可以调整这个 谢谢 您可以将 Recycler 视图与交错布局管理器一起使用 StaggeredGridLayout
  • 如何为 TFS 上的 dockerized F# Expecto 测试配置 CI

    我有一些码头化的由 Expecto 和 fscheck 框架编写的 F 测试 作为 dotnet 核心独立可执行文件 如何在 Team Foundation Server 上配置持续集成以运行它们并在每次运行后获取相应的报告 如果您的意思是
  • Play Framework:合并多模块项目中的多个全局对象

    我正在使用 Play 2 3 和 Java 8 构建一个多模块项目 根应用程序和每个模块都有一个全局对象 但我们如何知道 Play 仅使用根应用程序中的一个全局对象 简化的文件夹结构 root app Global java conf ap