代码之家  ›  专栏  ›  技术社区  ›  justinhj

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

  •  4
  • justinhj  · 技术社区  · 16 年前

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

    这可能吗?

    4 回复  |  直到 15 年前
        1
  •  6
  •   chrisparker2000    15 年前

    您总是可以编写自己的类加载器,并使用标准的类加载器将其链接起来。

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

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

        2
  •  2
  •   mcrisc    16 年前

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

        3
  •  1
  •   Biju Kunjummen    15 年前

    贾斯丁

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

    1. 使用自定义类加载器,根据chrisparker2000提供的解决方案按需加载内容,方法是在客户端类的顶部放置一个小门面,例如clientclassfactory,它基于环境(dev/prod/anything else)将使用自定义类加载器从任一cli加载ent.dev.otherext或client.prod.otherext。
        4
  •  1
  •   Reza    15 年前

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

    您还可以使用maven概要文件定义不同的jar文件/版本集。