java - 在可执行 jar 中加载 xml 文件给出错误文件无法找到,从 eclipse 运行没问题

标签 java xml maven-2 classpath

我有一个小型 Maven 应用程序,它从类路径加载 xml 文件并进行一些操作。它在 eclipse 中运行良好,但是当我运行 maven: assembly 并获取带有依赖项的可执行 jar 时,程序执行到需要获取 xml 文件的位置,然后给出:

    java.io.FileNotFoundException: /home/ubuntu/Documents/workspaces/workspace-sts-2.7.2/test/target/file:
/home/ubuntu/Documents/workspaces/workspace-sts-2.7.2/test/target/test-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/test.xml (No such file or directory)

test.xml 文件肯定在 jar 中,就像我说的,它在从 eclipse 运行时运行并发现该文件很好。我相信 list 文件设置正确:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: ubuntu
Build-Jdk: 1.6.0_26
Main-Class: org.test.test1.App
Class-Path:.

这是加载 xml 文件的代码:

  //load xml file from classpath
  DocumentBuilder builder = factory.newDocumentBuilder();
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  URL classpathFileLocation =                 
        classLoader.getResource("test.xml");
  File file = new File(classpathFileLocation.getFile());
  Document doc = builder.parse(file);

最佳答案

尝试更改此设置:

URL classpathFileLocation = classLoader.getResource("test.xml");
File file = new File(classpathFileLocation.getFile());

对此:

InputStream is = classLoader.getResourceAsStream("test.xml");
Document doc = builder.parse(is);  // Or look at the builder API to see what accepts InputStream

我不知道这是否有什么区别,但我会使用当前类的类加载器。

关于java - 在可执行 jar 中加载 xml 文件给出错误文件无法找到,从 eclipse 运行没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7479216/

相关文章:

java - 从另一个类调用类

java - kademila end emule 库

java - 从互联网加载架构

html - 使用 XSL 显示 XML 节点但保持 XML 的顺序 - 具有多个命名空间

java - 我得到一个 java.net.SocketException : Connection reset error

java - 尝试从另一个类的随机数中打印出数组

xml - T-SQL 和 XML - 将父元素和多个子元素连接到结果集中

java - 为什么 Hudson 忽略我的 profiles.xml 文件?

java - 谁运行 Maven Central,为什么在存储库更新可用之前会有延迟?

java - TestNG 并行测试配置