eclipse: включить файлы экспорта в экспорт jar - PullRequest
1 голос
/ 13 января 2012

У меня есть каталог произвольных файлов, которые я хочу включить в свой jar - однако я не могу найти способ сделать это, работающий с экспортом -> «Runnable jar». Я пытался сделать каталог «исходным путем», но он все еще отсутствует, когда я создаю флягу. Я понимаю, что могу вручную добавить их в банку (это, в конце концов, просто zip) - или я мог бы использовать ant-скрипт или другую систему сборки - но я ищу что-то, что работает вне коробка Eclipse "Проект Java".

Вот пример. Я хочу попробовать загрузить log4j.properties, если он существует. Если нет, я хочу выписать его из включенного «по умолчанию» в моем jarfile. Наконец, он загружает значения по умолчанию, если это не удается.

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

        // initialize logging libraries
    File log4jFile = new File("log4j.properties");
    if (log4jFile.exists() & log4jFile.canRead()) {
        PropertyConfigurator.configure(log4jFile.getAbsolutePath());
    }
    else {
        try {
            InputStream log4jJarstream = Main.class.getResourceAsStream(sepd + "resources" + sep + "log4j.properties");
            OutputStream outStream = new FileOutputStream(new File("log4j.properties"));
            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = log4jJarstream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }
            log4jJarstream.close();
            outStream.flush();
            outStream.close();
        }
        catch (Exception e) {
            BasicConfigurator.configure();
            log.warn("Error writing log4j.properties, falling back to defaults.");
        }
    }

Ответы [ 3 ]

1 голос
/ 25 марта 2012

Я добавил log4j.properties в свою папку src и экспортировал jar-файл как работающий.Это сработало.

0 голосов
/ 14 января 2012

Произошла ошибка в коде, загружающем файл как ресурс ... который, по-видимому, "увидел" Eclipse и поэтому отказывался упаковать файл. Я поместил файл рядом с файлами классов и изменил способ поиска файла, и он упаковал его в файлы .class и смог прочитать во время выполнения. Новый фрагмент кода:

// initialize logging libraries
    File log4jFile = new File("log4j.properties");
    if (log4jFile.exists() & log4jFile.canRead()) {
        PropertyConfigurator.configure("log4j.properties");
    }
    else {
        try {
            InputStream log4jJarstream = Main.class.getResourceAsStream("log4j.properties");
            OutputStream outStream = new FileOutputStream(new File("log4j.properties"));
            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = log4jJarstream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }
            log4jJarstream.close();
            outStream.flush();
            outStream.close();

            PropertyConfigurator.configure("log4j.properties");
        }
        catch (Exception e) {
            BasicConfigurator.configure();
            log.warn("Error writing log4j.properties, falling back to defaults.");
            log.warn(e);
            log.warn("STACK TRACE:");
            int i = 0;
            StackTraceElement[] trace = e.getStackTrace();
            while (i < trace.length) {
                log.warn(trace[i]);
                i++;
            }
        }
    }
0 голосов
/ 13 января 2012

Просто попробуйте Экспорт -> JAR-файл вместо экспорта Запускаемый JAR-файл : позволяет выбрать несколько ресурсов для включения в сгенерированный архив.

Вы также можете указать свойство Main-Class , как и в случае с последним параметром.

Кстати, более удобно, если вы используете какой-либо инструмент для сборки (например, Ant * 1012).* target или Плагин Maven Jar ).Если вы используете Eclipse для генерации JAR-файла, есть также возможность сохранить файл сборки Ant, который может выполнить эту задачу позже.

...