繁体   English   中英

getResourceAsStream以获取战争中的文件

[英]getResourceAsStream to get a file inside the war

我有一个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 /否WEB-INF
  • 有和没有课

我不知道该怎么做。 我正在使用wildfly,并使用Arquillian jboss容器进行测试。

我究竟做错了什么?

war文件的根目录不在webapp类加载器中。 WEB-INF/classes目录位于您的webapp类加载器中。 您应该将资源移到那里,然后只使用植根于WEB-INF / classs的路径。

指出不同:

"/WEB-INF/liquibase/db.tenant.xml";

/WEB-INF/classes/liquibase/db.tenant.xml

但实际上他们都是错的。 它应该是:

/liquibase/db.tenant.xml

因为CLASSPATH从/ WEB-INF / classes开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM