代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

Java 1.4中的JAR文件依赖关系

  •  2
  • C. Ross trotttrotttrott  · 技术社区  · 15 年前

    我正在研究一个小型Java项目,它现在连接到MS SQL Server 2000数据库,但不久将连接到MS SQL Server 2005数据库。我正在创建一个jar以便于部署。我试图设置它,这样我就可以更改配置文件和驱动程序(就像在.NET中那样)。但是,由于Java的局限性 Jar embedded classpath 以及嵌入式类路径(1)上缺少通配符。在不显式引用每个驱动程序jar的情况下,有没有办法解决这个问题? 如果必须这样做,我将不得不在每次数据库更改时重新编译…

    (1) :但是,类路径jar清单头中不支持类路径通配符。

    4 回复  |  直到 15 年前
        1
  •  2
  •   jsight TaherT    15 年前

    通常,您可以修改 classpath at runtime . 类似的方法是处理Java中的“插件”类型JAR的一般方法(与您的情况非常类似)。

        2
  •  0
  •   Bombe    15 年前

    您可以包括有关在配置文件中使用哪个驱动程序的信息。或者在JAR文件本身的清单中。启动应用程序时只需包含所有JAR文件,但从配置中加载驱动程序名称。

        3
  •  0
  •   Yishai    15 年前

    我要说的是,Java的方式(如在标准实践中)将第三方代码包含在部署的同一个jar中。然而,JAR只是一个zip文件,所以在大多数情况下(除了清单中的一些花哨的东西),如果需要的话,您可以组合它们。

    也就是说,您可以在JAR文件中包含对所有潜在JDBC驱动程序JAR的类路径引用,或者简单地以正确的方式调用JDBC驱动程序JAR。然后在同一个目录中有一个配置文件(一定要包括。在jar的类路径中),然后从中读取驱动程序名,并使用class.forname()加载驱动程序。

    你可以做一些更复杂的事情(比如在运行时找到合适的jar并动态地加载它,即使它不在类路径上),但是这些事情有点复杂,所以像上面这样简单的事情应该可以工作。

    你不应该重新编译。如果在更改驱动程序时必须重新编译,那么您实际上没有正确地执行JDBC。

        4
  •  0
  •   Krzysztof Krasoń    15 年前

    您必须为特定的提供者分离驱动程序JAR文件和JDBC驱动程序的实际名称。

    我真的鼓励您不要在自己的jar中包含JDBC驱动程序jar。 就在运行时的路径上。 类似地,您可以在运行时从系统属性中获取JDBC驱动程序管理器的名称,甚至是配置文件。

    所以像这样运行应用程序:

    java -jar myapp.jar -cp sqlserver.jar -DdriverManager=com.microsoft.sqlserver.jdbc.SQLServerDriver -DdbUrl=jdbc:some:url
    

    在您的应用程序中,执行如下操作(我省略了异常处理):

    Class.forName(System.getProperty("driverManager"));
    Connection conn = DriverManager.getConnection(System.getProperty("dbUrl"))
    

    ;

    通过这种方式,只需将适当的JAR文件添加到类路径并更改DriverManager和DBURL属性,就可以更改驱动程序。这样就不需要重新编译来支持新的驱动程序。

    这是我能想到的最简单的解决方案。