我有一个小型 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/