Java 在部署到tomcat之前(或期间),如何管理.war文件中的库版本?

Java 在部署到tomcat之前(或期间),如何管理.war文件中的库版本?,java,tomcat,deployment,war,dependency-management,Java,Tomcat,Deployment,War,Dependency Management,我的web应用程序只有一个.war文件。问题的根源是,我想为所有客户(具有不同环境)保留一个.war文件。为此,我应该在.war中保留不同版本的库,并决定在部署时使用哪一个 例如: 第一个客户是oracle 10,第二个客户是oracle 11。我想在war中保留这两个ojdbc.jar文件,并根据属性文件中的一些参数选择使用哪一个 解决这个问题的一个解决方案是编写我自己的类加载器,它不会加载无用的文件(如下所示:) 问题是我们的类加载器类应该位于“tomcat\lib”目录中。我的应用程序的这

我的web应用程序只有一个.war文件。问题的根源是,我想为所有客户(具有不同环境)保留一个.war文件。为此,我应该在.war中保留不同版本的库,并决定在部署时使用哪一个

例如:

第一个客户是oracle 10,第二个客户是oracle 11。我想在war中保留这两个ojdbc.jar文件,并根据属性文件中的一些参数选择使用哪一个

解决这个问题的一个解决方案是编写我自己的类加载器,它不会加载无用的文件(如下所示:)

问题是我们的类加载器类应该位于“tomcat\lib”目录中。我的应用程序的这个do安装更复杂

也许还有其他方法可以解决这个问题?在我的应用程序中,使用反射或其他方式以编程方式完成这项工作将是非常棒的


谢谢你的帮助

IMHO您给出的示例(数据库驱动程序)的最佳实践是通过tomcat提供数据源。这意味着数据库驱动程序jar需要位于全局类路径中(
tomcat/lib
)。这也将保持您为所有客户提供相同的.war文件的意图-当您更新此文件时,您只需要为所有用户提供相同的文件

在数据库连接的情况下,无论如何,您都很可能需要为每个客户定制一个数据库——通过tomcat将其作为数据源提供,这样就有必要对其进行一次配置(在第一次安装时),但之后就不必担心了


如果数据库驱动程序不是您唯一的问题,请使用更多不同环境/JAR的示例更新您的问题。

此deps版本是否仅与jdbc驱动程序相关,您是否使用框架?更多详细信息可能有助于获得答案在Spring框架中,您可以轻松设置自己的类加载器,但如果您的应用程序已经实现,则这可能不是您的选项。@RC是的,在我的情况下,问题只存在于JDBC驱动程序。@gigadot我们使用Spring,因此它可能是我问题的解决方案。我将以这种方式进行调查。编写自己的类加载器来为不同的用户加载不同的版本并不是件小事。你可能想看看OSGi。spring动态模块支持OSGi。