Экспорт JAR-файлов с передаваемыми аргументами

Я пытаюсь экспортировать java-программу через eclipse, но у меня возникают некоторые проблемы:

Я хочу иметь возможность запускать его через командную строку и передавать ему аргументы, в частности, расположение файла свойств.

Я попытался экспортировать его как исполняемый jar-файл, используя main в качестве конфигурации запуска, а также используя другую конфигурацию запуска, в которой аргументы передаются во время выполнения.

public static String currentStatus;
public static String filename = "etc/ryanair.properties";   
public boolean isDuplicate = true;

public static void main(String args[]) throws IOException {
    String file = args[0];
    Properties config = new Properties();       
    config.load(new FileInputStream(file));

    System.out.println("====================BEGIN=======================");
    HtmlParser htmlparse = new HtmlParser(config);

    List<String> list = htmlparse.parse();  

    debug(list);    

В основном я хочу передать местоположение файла свойств, т.е. etc/ryanair.properties, но я продолжаю получать следующую ошибку:

Exception in thread "main" java.io.FileNotFoundException: 
           etc/ryanair.properties (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at com.beezer.twitter.traffic.Main.main(Main.java:17)

Как ни странно, если я использую переменную filename вместо file, где мне не нужно передавать аргументы, я получаю ту же ошибку.

Я могу нормально запускать их в eclipse либо с расположением файла в виде фиксированной переменной, либо с передачей с конфигурацией запуска, но не через командную строку.

Папка etc находится как подкаталог папки src в eclipse.

Может ли кто-нибудь увидеть, что я делаю неправильно здесь?


person Colonel Mustard    schedule 10.02.2014    source источник
comment
Откуда вы запускаете командную строку? Вероятно, это не то же место, откуда Eclipse запускает банку.   -  person Mad Physicist    schedule 10.02.2014
comment
Я запускаю терминал в той же папке, где хранится файл jar, т.е. /Projects/Ryanair/   -  person Colonel Mustard    schedule 10.02.2014


Ответы (1)


В вашем коде он будет искать файл ryanair.properties в папке etc/. И эта папка etc должна находиться в вашем текущем пути вместо вашей папки .jar.

Возможно, вы хотели бы создать файл свойств в своем файле .jar, вы должны сделать файл свойств своим файлом ресурсов (в eclipse щелкните файл правой кнопкой мыши, путь сборки -> добавить в путь сборки), а затем используйте HtmlParser.class.getResource("/ryanair.properties").getPath(), чтобы получить имя файла. Позаботьтесь о корневом пути ресурса.

о текущем пути , который является текущим путем ? В Linux вы можете использовать pwd, в Windows вы можете использовать echo %cd%.

person Lumen    schedule 10.02.2014
comment
Исправление, папка etc является корневой папкой программы, т.е. myproject/etc имеет тот же корень, что и папки /src и /lib. По сути, я хочу создать одну программу, которая будет возвращать разные результаты на основе файла свойств, переданного во время выполнения, то есть разных авиакомпаний и т. д. - person Colonel Mustard; 10.02.2014
comment
@mcgowan.b mcgowan.b, так что ... вы можете надеяться сделать эту папку etc / вне файла jar? Относительный путь не может быть хорошей идеей. Опять же, текущее местоположение зависит от того, где вы вызываете файл .jar. - person Lumen; 10.02.2014