簡體   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