我有一个maven项目,用我想要阅读的文件构建一个war文件。
不会抛出异常......
编辑 请注意,不在servlet中:
@Path("")
@Stateless
public class MessageRestService {
//String liquibaseTenantDefinitionFile = "/WEB-INF/liquibase/db.tenant.xml";
//String liquibaseTenantDefinitionFile = "/WEB-INF/classes/liquibase/db.tenant.xml";
//String liquibaseTenantDefinitionFile = "WEB-INF/classes/liquibase/db.tenant.xml";
//String liquibaseTenantDefinitionFile = "/liquibase/db.tenant.xml";
String liquibaseTenantDefinitionFile = "liquibase/db.tenant.xml";
public InputStream getTenantFile(){
try {
return getClass().getClassLoader()
.getResourceAsStream(liquibaseTenantDefinitionFile);
} catch(Exception e){
System.err.println(e);
System.err.println(e.getMessage());
e.printStackTrace();
}
return null;
}
此文件确实存在于war文件中:
jar -tf target/grest-0.0.1-SNAPSHOT.war | grep db.tenant.xml
WEB-INF/classes/liquibase/db.tenant.xml
方法总是返回null,我尝试了各种排列:
我无法弄清楚如何做到这一点。我正在使用wildfly并使用Arquillian jboss容器进行测试。
我做错了什么?
答案 0 :(得分:0)
war文件的根目录不在webapp类加载器中。 WEB-INF/classes
目录位于webapp类加载器中。您应该将资源移动到那里,然后只使用以WEB-INF / classes为根的路径。
答案 1 :(得分:0)
发现差异:
"/WEB-INF/liquibase/db.tenant.xml";
和
/WEB-INF/classes/liquibase/db.tenant.xml
但实际上他们都错了。它应该是:
/liquibase/db.tenant.xml
,因为CLASSPATH从/ WEB-INF / classes开始。