getResourceAsStream来获取战争中的文件

时间:2016-12-24 01:20:09

标签: java maven jboss

我有一个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,我尝试了各种排列:

  • 领先斜线
  • 没有领先的斜杠
  • 不同的类加载器获取方法
  • WEB-INF / no WEB-INF
  • 有和没有班级

我无法弄清楚如何做到这一点。我正在使用wildfly并使用Arquillian jboss容器进行测试。

我做错了什么?

2 个答案:

答案 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开始。