2012-03-28 67 views
1

我正在使用共享库作为我的Java EE项目的依赖项。 War文件正在部署到Tomcat。战争依赖在类路径中查找文件

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

回答

0

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

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

1

包装你的战争

最简单的办法是,如果你能包你部署的WAR文件中所有依赖JAR文件和类。然后,您可以控制它们如何从指定的类路径加载。

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

下的任何支持JAR文件应该是你的WAR文件中的web-inf\lib目录下进行。

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

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

文件是否存在于类路径中?

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

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

下面是从Oracle一些额外的阅读Location-Independent Access to Resources

1

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

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