Переменная classpath в Java - PullRequest
1 голос
/ 13 июля 2010

Я читаю несколько файлов в моем приложении и называю их new File("src/main/resource/filename"), и это работает.Но когда я упаковываю банку с плагином сборки Maven и запускаю java - jar, я получаю ошибку, естественно:

Произошла ошибка: src\main\resources\UPDATE.txt (система не может найти указанный путь)

Поскольку в jar нет src/main/resources, как я могу сослаться на src/main/resources как некоторую переменную classpath, чтобы приложение работало как в автономном java, так и в собранном jar?

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Вам нужно будет загрузить файл, используя метод Class.getResourceAsStream ()

Например,

InputStream str = getClass().getResourceAsStream("/UPDATE.txt");

Или, если вы используете статический метод, укажите класс явно

InputStream str = MyApp.class.getResourceAsStream("/UPDATE.txt");

РЕДАКТИРОВАТЬ:

С StreamSource просто передать входной поток в источник потока, например,

   new StreamSource(getClass().getResourceAsStream("/UPDATE.txt"));

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

2 голосов
/ 13 июля 2010

src / main / resources - соглашение о времени разработки, за которым следуют проекты maven для размещения артефактов, отличных от исходного кода.Как только баночка была построена, они добавляются в путь к классам.Так, например, в вашем сценарии UPDATE.TXT находится в корне пути к классам.

Так что вы должны ссылаться на ресурсы из пути к классам, а не из файловой системы.http://mindprod.com/jgloss/getresourceasstream.html

...