我使用共享库作为我的Java EE项目的依赖项。 War文件正在部署到Tomcat。
共享库依赖于在类路径中找到的文件。有没有办法保证文件将在类路径中?我无法在共享库中硬编码文件的路径。我也不能避免使用需要它的类。
答案 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加载的类搜索的)。
您可以在包装过程中将文件复制到那里吗?