【问题标题】:Add dynamic dependencies to a Play application after it's built构建后向 Play 应用程序添加动态依赖项
【发布时间】:2018-07-25 18:17:22
【问题描述】:

我将我的 Play 应用作为服务器分发,由我的客户在本地运行。我发布的功能之一是服务器端 API,使他们能够插入在服务器地址空间中运行的代码。此代码编译为 jar 文件并放入我的安装创建的目录ext/,与常规lib/ 目录处于同一级别。

问题是我没有一个好的方法来让类加载器找到这些依赖项。我编写了一个自定义类加载器,只要是我的代码执行加载,它就可以正常工作。当我实例化顶级自定义类时就是这种情况,但不是更进一步,例如一个 JDBC 驱动程序或一个 Kafka 客户端,依赖于客户端代码。

我找到的权宜之计是将:/path/to/server/ext/* 附加到应用程序启动bash 脚本中app-classpath 的长硬编码(有充分理由 - 我明白了)列表(2.6 中的第 341 行) .想知道有没有更好的解决方案。例如,为什么不尊重 classpath 环境变量?

还是别的什么?

【问题讨论】:

  • 我不清楚你的情况,但也许你需要使用 OSGI 之类的东西而不是自定义类加载器?
  • 不,我不这么认为。

标签: java playframework sbt classloader playframework-2.6


【解决方案1】:

如果您只需要区分开发、部署之间的路径,为什么不将您的环境变量添加到application.conf

my.majestic.path="/blah/blah"

客户可以在conf 文件夹中覆盖此路径以添加该路径。

更具可扩展性的解决方案:如果您的客户是使用集群来处理应用程序(例如 Kubernetes)的大男孩和女孩,那么您可以拥有这个:

my.majestic.path="/blah/blah"
my.majestic.path=${?MY_MAJESTIC_PATH}

那么MY_MAJESTIC_PATH会在集群管理的生产过程中被覆盖。这应该由客户处理。

【讨论】:

  • 谢谢,戴夫。我不明白这如何解决我的问题,即如何将my.majestic.path 添加到服务器的类路径构建之后。
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 2017-11-07
  • 2021-09-11
  • 2014-09-30
  • 2012-01-22
  • 2020-02-17
  • 2019-02-14
  • 2018-10-12
相关资源
最近更新 更多