classLoader.getResource()在Eclipse中工作,但在部署时返回null

时间:2017-06-09 09:40:37

标签: java eclipse deployment nullpointerexception resources

我为应用程序创建可执行jar时出现问题,我无法读取资源文件夹中的任何文件。 资源文件位于:src>主要>资源。

我有一个.xml配置文件和log4j.properties文件。

当我从Eclipse中运行应用程序时,一切正常(xml被读出并创建了日志文件)但是当我将其部署为可执行jar时,突然没有再写入日志文件而classLoader.getResource(xmlFile)返回空。

知道如何解决这个问题吗?

这是我使用的一段代码: 参数xmlFile只是文件名,例如'readMe.xml'

private Document xmlDocument (String xmlFile) throws ParserConfigurationException, SAXException, IOException{
    // return null if the file is not an xml file
    System.out.println(" - xmlFile  : " + xmlFile);
    if(! xmlFile.substring(xmlFile.lastIndexOf(".") + 1).toLowerCase().equals("xml")  ){
        return null;
    }

    //Get Document Builder
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();

    //Build Document
    ClassLoader classLoader = getClass().getClassLoader();

    URL res = classLoader.getResource( xmlFile);
    System.out.println(" - res : " + res);

    File file = new File( classLoader.getResource(  xmlFile).getFile() );
    if (file == null){
        System.out.println(" - xmlDocument - OUT");
        return null;
    }

    Document document = builder.parse(new File(classLoader.getResource(xmlFile).getFile()));
    //Normalise the XML Structure; 
    System.out.println(" - xmlDocument 5 - before normalizing document");
    document.getDocumentElement().normalize();

    return document;
}

1 个答案:

答案 0 :(得分:0)

您可能必须在类路径中指定资源,请尝试此操作。

  1. 将您的类导出为普通jar,而不是可执行jar。
  2. 将所有资源复制到配置目录<base_paths>/config,然后将jars复制到目录<base_paths>/lib
  3. 运行命令
  4. Windows中的

    java -cp <base_paths>/config;<base_paths>/lib/yourJar.jar com.xyz.YourMainclass
    

    在Unix中

    java -cp <base_paths>/config:<base_paths>/lib/yourJar.jar com.xyz.YourMainclass