我有一个 Web 应用程序,它包含一个配置 xml 文件,用于我的一个应用程序服务,该服务公开为 spring bean。 我在同一个工作区中还有一个独立的 Java 应用程序(从它的 pom.xml 引用我的 Web 应用程序项目),它使用 Spring TestContext 框架运行测试,其中一个测试检查该 XML 文件的配置。
但是我在从独立应用程序访问此 xml 文件时遇到问题:
在设置测试之前,在我之前的配置中,该文件是通过 ServletContext 访问的,位于 WEB-INF/ 文件夹中。但是,为了使它可以从测试项目访问,我必须将它移动到 source/ 文件夹并使用 getClassLoader().getResourceAsStream() 方法而不是 ServletContext 方法加载它。但这会使编辑文件变得很麻烦,因为每次都必须重新部署应用程序。
是否可以将文件保存在 WEB-INF/ 文件夹中,但在测试运行期间从引用项目加载它?
附言目前它是一个带有 Tomcat 服务器的 STS 项目。
最佳答案
如果文件应该存放在 WEB-INF/文件夹下,则一定要将其保存在该文件夹下。
用于从命令行执行的测试类。您可以对您知道位于类路径根目录中的文件(例如 application.properties 文件)使用 getClassLoader().getResource()。从那里您知道项目的结构以及在哪里可以找到与属性文件相关的 WEB-INF/。由于它会返回一个 URL,因此您可以使用它来找出您要查找的 XML 文件的路径。
URL url = this.getClass().getClassLoader().getResource("application.properties");
System.out.println(url.getPath());
File file = new File(url.getFile());
System.out.println(file);
// now use the Files' path to obtain references to your WEB-INF folder
希望您觉得这很有用。我不得不对您的测试类如何运行等做出假设。
看看 File Class getPath()、getAbsolutePath() 和 getParent() 方法可能对您有用。
关于java - 如何从引用的java项目访问静态资源(WEB-INF)文件夹中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638790/