【发布时间】: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