使用相同的包和类名动态管理两个jar文件

时间:2010-03-10 17:17:27

标签: java class packages

我有两个来自客户端的jar文件,其中一个用于测试,另一个用于最终版本。目前我将它们放在不同的文件夹中并在部署代码时修改库路径,但是能够加载两个jar文件并在运行时动态切换它们会很好。

这可能吗?

4 个答案:

答案 0 :(得分:6)

您始终可以编写自己的ClassLoader并使用标准ClassLoader链接它。

http://download.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html

我在10年前使用这种方法来加载通过套接字接收并在XML文件中指定的类(也通过套接字)。我的java程序不知道这些类在获得XML文件和类之前就已经存在了。

答案 1 :(得分:2)

使用OSGi包可以做到这一点。看看http://blog.springsource.com/2008/02/18/creating-osgi-bundles/。搜索“多个版本”。

答案 2 :(得分:1)

justinjh,

chrisparker2000的建议看起来是最可行的 - 你必须编写一个自定义类加载器,我能想到的唯一变化是以下几行: 1.对于客户端可交付的jar - 比如client.dev.jar和client.prod.jar,重命名为不同的扩展名并将它们放在类路径中。重命名为不同的扩展名以防止容器加载jar的内容。

  1. 使用自定义类加载器,根据chrisparker2000提供的解决方案按需加载内容,在客户端类的顶部放置一个小外观,比如基于环境的ClientClassFactory(dev / prod / anything)使用自定义类加载器从client.dev.otherext或client.prod.otherext加载。

答案 3 :(得分:1)

如果您使用像maven这样的构建工具,则可以为不同的范围(测试与生产)定义不同的jar文件(依赖项)。

您也可以使用maven配置文件来定义不同的jar文件/版本集。