Java getResourceAsStream JAR inside WAR

前端 未结 3 1502
粉色の甜心
粉色の甜心 2020-12-18 09:51

I have a Java webapp WAR file that depends on multiple jars in it\'s WEB-INF\\lib directory. One of these JARS needs to load some config files by doing class.getClassL

相关标签:
3条回答
  • 2020-12-18 10:08

    Assuming you're not making the rookie mistake of putting QueryLoader in a different JAR, the only problem I can see is that you're using File.separator yet appear (from your use of \) to be using Windows. When using getResourceAsStream, the separator is always a forward slash (/) just as if you're using a URL.

    If I change that I get this:

    QueryLoader.class.getClassLoader().getResourceAsStream(
              "/com/companyname/queries/" + fileName)
    

    Of course, if QueryLoader is in the com.companyname.queries package (along with the queries themselves) then you should simply do this:

    QueryLoader.class.getResourceAsStream(fileName)
    

    Simple as that. (It's documented that Class.getResourceAsStream qualifies relative filenames with the name of the containing package.)

    0 讨论(0)
  • 2020-12-18 10:16

    It should work, but you need to take care that you use the correct class loader.

    0 讨论(0)
  • 2020-12-18 10:23

    Managed to get it to work by using Spring's resource loader instead

    public String loadQuery(String fileName) {
      final String newline = "\n";
    
      ApplicationContext ctx = new ClassPathXmlApplicationContext();
      Resource res = ctx.getResource("classpath:/com/msi/queries/" + fileName);
      BufferedReader reader;
      StringBuilder sb = new StringBuilder();
      try {
         reader = new BufferedReader(new InputStreamReader(res.getInputStream()));
         String line;
    
         while ((line = reader.readLine()) != null) {
            sb.append(line);
            sb.append(newline);
         }
      } catch (IOException e) {
         LOGGER.error(e);
      }
    
      return sb.toString();
    

    }

    0 讨论(0)
提交回复
热议问题