Java 将动态依赖项添加到播放应用程序后';s建造

Java 将动态依赖项添加到播放应用程序后';s建造,java,playframework,sbt,classloader,playframework-2.6,Java,Playframework,Sbt,Classloader,Playframework 2.6,我将我的Play应用程序作为服务器分发,该服务器由我的客户在prem上运行。我发布的功能之一是服务器端API,使他们能够插入在服务器地址空间中运行的代码。此代码被编译为jar文件,并放入由我的安装程序创建的目录ext/,与常规的lib/目录处于同一级别 问题是我没有一个好的方法让类装入器找到这些依赖项。我已经编写了一个自定义类加载器,只要是我的代码进行加载,它就可以正常工作。当我实例化顶级自定义类时就是这种情况,但不是更进一步,例如JDBC驱动程序或Kafka客户机,依赖于客户机代码 我找到的权

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

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

我找到的权宜之计是将
:/path/to/server/ext/*
附加到应用程序启动bash脚本(2.6中的第341行)中的
app classpath
的长硬编码列表中(这是一个很好的理由——我明白了)。想知道是否有更好的解决方案。例如,为什么不使用
classpath
env变量呢


或者其他什么?

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

my.majestic.path="/blah/blah"
客户可以在
conf
文件夹中覆盖该路径以添加该路径

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

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

然后,在集群管理的生产过程中,
MY_MAJESTIC_路径
将被覆盖。这应该由客户来处理

我不清楚你的情况,但也许你需要使用OSGI之类的东西,而不是自定义类加载器?不,我不这么认为。谢谢,Dave。我不知道这是如何解决我的问题的,也就是说,
my.majestic.path
如何在构建后添加到服务器的类路径中。