#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
…каталог?