如何从JUnit测试中访问webapp下的静态资源?
问题描述:
我写了一个JUnit测试,用于验证服务针对其XSD返回的xml。我最初把XSD放在src/main/resrouces/xsd/<filename>.xsd
下但现在我需要将它作为静态资源在webapp
之下移动,以便在部署应用程序时公开访问它。如何从JUnit测试中访问webapp下的静态资源?
我宁愿没有两个副本,因为我希望有人迟早会修改错误的。
我当时正在加载文件getClass().getResource("/xsd/<filename>.xsd")
,如果资源移动到webapp
下,我将如何访问它?
答
在你的pom中添加它作为资源目录。
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>xsd/schema.xsd</include>
</includes>
</resource>
</resources>
在java中使用
String path = "/xsd/schema.xsd";
InputStream is = getClass().getResourceAsStream(path);
答
你的资源仍将保留在类路径中,因此通常加载它你现在要做的应该保持工作的方式。
答
/src/main/webapp
内容放置在CLASSPATH创建WAR时和部署,而不是在JUnit测试(无论是在Maven的,在我的IDE)。您必须明确使用它们:
new File("src/main/webapp/xsd/<filename>.xsd");
只要项目主目录是运行测试时的当前目录,就应该这样工作。悲伤但真实。
我没有测试过这一点,因为我去了另一条路线,最终,但我想它会奏效。 – 2012-03-18 00:23:36