【发布时间】:2011-01-26 00:19:51
【问题描述】:
我有两个来自客户端的 jar 文件,一个用于测试,另一个用于最终版本。目前,我将它们放在不同的文件夹中,并在部署代码时修改库路径,但如果能够同时加载两个 jar 文件并在运行时动态切换它们,那就太好了。
这可能吗?
【问题讨论】:
我有两个来自客户端的 jar 文件,一个用于测试,另一个用于最终版本。目前,我将它们放在不同的文件夹中,并在部署代码时修改库路径,但如果能够同时加载两个 jar 文件并在运行时动态切换它们,那就太好了。
这可能吗?
【问题讨论】:
您始终可以编写自己的 ClassLoader 并将其与标准 ClassLoader 链接。
http://download.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html
10 年前我使用此方法加载通过套接字接收并在 XML 文件中指定的类(也通过套接字)。我的 java 程序在获得 XML 文件和类之前甚至不知道这些类已经存在。
【讨论】:
使用 OSGi 包可以做到这一点。看看http://blog.springsource.com/2008/02/18/creating-osgi-bundles/。搜索“多个版本”。
【讨论】:
贾斯汀,
chrisparker2000 的建议看起来是最可行的 - 您必须编写一个自定义类加载器,我能想到的唯一更改是以下几行: 1. 对于客户端可交付的 jar - 比如 client.dev.jar 和 client.prod.jar,重命名为不同的扩展名并将它们放在类路径中。重命名为不同的扩展名,以防止容器加载 jar 的内容。
【讨论】:
如果您使用像 maven 这样的构建工具,您可以为不同的范围(测试与生产)定义不同的 jar 文件(依赖项)。
您还可以使用 maven 配置文件来定义不同的 jar 文件/版本集。
【讨论】: