战争依赖性在类路径中查找文件

时间:2012-03-28 07:05:32

标签: tomcat classpath

我使用共享库作为我的Java EE项目的依赖项。 War文件正在部署到Tomcat。

共享库依赖于在类路径中找到的文件。有没有办法保证文件将在类路径中?我无法在共享库中硬编码文件的路径。我也不能避免使用需要它的类。

3 个答案:

答案 0 :(得分:1)

打包您的WAR

最简单的解决方案是在可部署的WAR文件中打包所有依赖的JAR文件和类,如果可以的话。然后,您可以控制从指定的类路径加载它们的方式。

正如BGR所提到的,所有已编译的java scource(* .class文件)都应该在web-inf\classes目录下的WAR文件中可用

任何支持JAR文件都应放在WAR文件中的web-inf\lib目录下。

Tomcat了解这些目录结构,因为它是WAR文件的行业标准格式。

您当然可以偏离此标准结构并从WAR外部的其他位置加载JAR文件,但是您必须了解潜在的类加载问题。我所提到的是最简单的前进方式。

类路径中是否存在文件?

在您的应用程序中,您可以执行以下操作来检查类路径中是否存在特定文件。

URL resource = this.getClass().getClassLoader().getResource(path);

以下是Oracle关于Location-Independent Access to Resources

的一些补充说明

答案 1 :(得分:1)

如果共享库(例如lib1)是您的 - 那么您可以将必要的文件打包到它的jar中。 jar的根文件夹是classpath的根。

如果lib1是第三方,您可以在jar中使用此文件创建lib1-res库。并且总是一起使用这些库(如果使用了maven,则使lib1-res依赖于lib1。)

答案 2 :(得分:0)

战争中WEB-INF /类中的任何内容都在'classpath'中(假设它是由使用webapp的URLClassLoader加载的类搜索的)。

您可以在包装过程中将文件复制到那里吗?