在Tomcat的类路径中包含web-inf/lib目录

4
在我的web应用中,默认情况下会添加WEB-INF/lib到类路径中,这是很好的。现在,我想将spring jar文件添加到我的tomcat的类路径中。如果我将所有的jar文件放在WEB-INF/lib中,那么它就可以正常工作。但是,如果我想要添加一个名为WEB-INF/lib/spring的目录,并将所有的jar文件放在spring目录中,它就不能正常工作。我该如何将WEB-INF/lib/spring包含在类路径中呢?
我更喜欢在web.xml中进行更改,因为它非常局部化到我的web应用程序。当然,我不想在catalina.properties中进行更改,因为所有的jar文件都是被加载到JVM中(而不仅仅是添加到类路径中)。

那不是 %CATALINA_HOME%/lib 目录的作用吗? - Marcelo
整个目的是将不同的jar文件分隔在不同的文件夹中,例如lib/hibernate,lib/spring等。默认情况下,只有lib是类路径的一部分。 - Deepak Singhal
2
WEB-INF/lib 目录下不能有子目录。正如 Servlet 规范所述,只有直接位于 lib 目录下的 jar 文件(/WEB-INF/lib/*.jar)才会被类加载器加载。 - sperumal
你可以为每个jar文件创建一个链接,这样你仍然可以将它们分组。但是管理这些链接可能并不容易。 - eeezyy
2个回答

7

你不需要关心jar文件在war文件中是如何分离的,这只会被容器使用。将jar文件分开可能对你的源项目有用。但是,你只需要有一个构建过程(使用ant、gradle或其他工具),将所有子目录中的jar文件复制到WEB-INF/lib中即可。在Ant中使用:

<copy todir="web/WEB-INF/lib" flatten="true">
    <fileset dir="lib">
        <include name="**/*.jar"/>
    </fileset>
</copy>

好主意。有没有想过如何在不使用Ant的情况下,通过Eclipse来实现呢?我猜测Eclipse的“构建器”可以被配置来完成这样的任务,但是在默认安装中并没有看到明显的选项。也许有一个插件可以做到这一点? - Jules
对于Eclipse,如何将Web-INF / lib文件夹移动到Java动态Web应用程序的子文件夹中 - Alireza Fattahi

0

由于事物不关心JAR命名,另一种选择是简单地在JAR上附加前缀(即“spring-OLD JAR NAME.jar”),以便将相关的JAR分组而无需使用文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接