从其他位置加载JAR有多难?

时间:2011-08-17 18:45:13

标签: java classloader

我有以下情况。我正在使用一个服务器,它有一个包含所有JAR的lib文件夹,但是当服务器有多个应用程序时,事情会变得复杂,因为lib目录有点疯狂。

我想要做的是将我的所有应用程序的JAR放在不同的位置,并指示类加载器在加载应用程序时加载它们。我怎样才能做到这一点?我将如何重写我的应用程序以促进这一点?

2 个答案:

答案 0 :(得分:4)

据我所知,除非您编写了自己的类加载器,否则无法在运行时加载jar文件或设置CLASSPATH。 Tomcat是一个很好的例子,其中tomcat的类加载器以多级动态加载jar文件。

http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

有一个通用的类加载器,允许在所有Web应用程序中共享jar文件。但是,如果要添加仅为Web应用程序加载的jar文件,则应将其添加到webroot下,例如WEB-INF / lib目录下。此文件夹中的库不会共享给所有应用程序。例如,这意味着如果两个Web应用程序正在使用同一个库的不同版本,则它们不会混淆。

由于我正在使用maven来管理项目,所以我不需要担心在哪里放置我的ja依赖项。 Maven会自动将库捆绑到war文件中。

因此,如果您没有使用servlet容器,例如tomcat,jetty等,那么你将需要编写一个类加载器。如果有必要,那么看看tomcat但是这可能并不容易。

答案 1 :(得分:2)

您可以在Java 6中将目录添加到类路径中。