Путь к классу JAR и внешние банки

#java #jar #classpath #manifest

#java #jar #путь к классу #манифест

Вопрос:

На самом деле у меня есть 2 проблемы

Я использую eclipse -> export project для генерации jar-файла для моей простой программы для рабочего стола (GUI)
Она генерирует jar-файл и ant-скрипт.

первая проблема: сгенерированный jar отлично работает при двойном щелчке.
Когда я использую сгенерированный ant-скрипт для самостоятельной генерации jar
, это не работает. Что может быть не так с подобной целью (при условии, что соблюдены все зависимости)

  <target name="create_run_jar">
        <jar destfile="G:/dev/myproj/myproj.jar">
            <manifest>
                <attribute name="Main-Class" value="view.myproj"/>
                <attribute name="Class-Path" value=". myproj_lib/grouplayout.jar"/>
            </manifest>
            <fileset dir="G:/dev/myproj/bin"/>
        </jar>
        <delete dir="G:/dev/myproj/myproj_lib"/>
        <mkdir dir="G:/dev/myproj/myproj_lib"/>
        <copy file="G:/dev/.metadata/.plugins/org.dyno.visual.swing/layoutext/grouplayout.jar" todir="G:/dev/myproj/myproj"/>
    </target>  
  

//неважно
// Вторая проблема:
// когда я дважды щелкаю по автоматически сгенерированному файлу jar, программа запускается и работает нормально.
// когда я запускаю java myjar из командной строки, я получаю исключение main class not found..
// странно, да?

Комментарии:

1. Вам нужно сообщить нам об ошибке, которую вы получили из-за проблемы1. И проблема 2, какую именно команду Java вы используете? Используете ли вы java -jar?

2. черт возьми! Я чувствую себя таким глупым! Я забыл -jar, но первая проблема остается: самогенерированный jar из автоматически сгенерированного ant-скрипта не реагирует на щелчки.. ничего не происходит

3. Какое сообщение об ошибке вы получаете при запуске Ant-скрипта?

4. нет! ant-скрипт выполняется нормально

Ответ №1:

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

Однако я подозреваю, что @Pace указал на проблему; т. Е. что вы используете относительные пути в Class-Path записи манифеста, и это может вызвать проблемы.

Ответ №2:

java -jar <jar name> это правильный способ выполнения jar.

Ответ №3:

Целью ant является создание манифеста с атрибутом classpath. Если вы посмотрите на эти пути, вы заметите, что они относятся к текущему каталогу. Когда вы запускаете java -jar из командной строки, находитесь ли вы в…

 G:/dev/myproj
  

…каталог?