Java classpath и файл конфигурации - PullRequest
4 голосов
/ 23 февраля 2012

У меня проблемы с поиском файла конфигурации с classpath.

Я использую:

InputStream stream = myclass.class.getResourceAsStream("properties.file");

Файл properties.file находится в каталоге config.

При запуске программы с eclipse она работает. Я только что добавил конфигурационную папку в classpath в конфигурации запуска.

Но если я хочу запустить экспортированную банку так:

java -jar -cp C:\project\lib;C:\project\config myclass.jar

Я получаю о чудо java.lang.NullPointerException, потому что он не может найти файл.

Звучит классически и глупо, но я не могу найти подсказку. Что затмение делает то, что я не делаю?

Спасибо

Ответы [ 5 ]

2 голосов
/ 25 июня 2012

Вы должны использовать абсолютный путь для класса (если вы не хотите помещать файл свойств в свой jar относительно класса)

InputStream stream = myclass.class.getResourceAsStream("/properties.file");

или просто

InputStream stream = myclass.class.getClassLoader().getResourceAsStream("properties.file");

И затем убедитесь, что путь к каталогу, содержащему этот файл ресурса, указан в classpath при запуске jar, чтобы системный загрузчик смог найти этот ресурс.

1 голос
/ 23 февраля 2012

Для того, чтобы ваш Экспортированный Jar Files имел доступ к вашим resources,

  1. Right Click Ваш проект в Затмение
  2. Выберите New -> Source Folder, теперь назовите это Source Folder как, скажем, resources
  3. Теперь вручную добавьте config folder в эту папку через File System
  4. Теперь вернитесь к вашему Затмению Right Click вашего проекта и выберите Refresh

Теперь можно увидеть добавленную папку внутри Project Tree. Теперь, чтобы получить доступ к содержимому вашей папки конфигурации, напишите это:

InputStream stream = myclass.class.getResourceAsStream("/resources/config/properties.file");
0 голосов
/ 18 ноября 2016

Если вы введете java -help, вы увидите следующее ИСПОЛЬЗОВАНИЕ:

Использование: java [-options] class [args ...] (для выполнения класса)
или java[-options] -jar jarfile [args ...] (для выполнения файла jar)

Так что, возможно, вам нужно будет исправить команду следующим образом:

java -cp C:\project\lib;C:\project\config -jar myclass.jar

Вы также можете попробовать следующее:

java -classpath C:\project\lib;C:\project\config -jar myclass.jar

Или даже установить путь к классу перед запуском вашей программы:

set CLASSPATH=C:\project\lib;C:\project\config
java -jar myclass.jar
0 голосов
/ 23 февраля 2012

Если вы не хотите включать файл config в свой jar-файл, вы можете передать путь к config-файлу в качестве аргумента командной строки для вашего приложения.

java -jar myclass.jar C:\project\config 

и затем загрузите файл по абсолютному пути

public static void main(String[] args)
{
   String pathToConfig = args[1]; //or 0/2, check to see
   String configFilePath = pathToConfig  + "/properties.file";
   String[] lines = FileUtil.ReadLines(configFilePath);

}

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

0 голосов
/ 23 февраля 2012

при запуске файла JAR с использованием java -jar он игнорирует путь к классу, указанный в -cp

См .:

...