загрузка XML-файла в исполняемый файл JAR дает файл ошибки не может быть найден, запуск из затмения в порядке - PullRequest
0 голосов
/ 20 сентября 2011

У меня небольшое приложение maven, оно загружает XML-файл из classpath и выполняет некоторые манипуляции. Он отлично работает из 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. Я считаю, что файл манифеста настроен правильно:

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);

1 Ответ

1 голос
/ 20 сентября 2011

Попробуйте изменить это:

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

Не знаю, имеет ли это какое-то значение, но я бы использовал загрузчик классов для текущего класса.

...