Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > самозапускающийся Jar архив. Как создать?


Автор: polosatij 7.10.2004, 13:12
есть jar.exe. Но что-то так у меня и не получается создать Jar архив по инструкции.. то путь не правильный.. теперь не может найти main-class...

Народ, может кто опишет? я думаю эта тема не мне одному была бы интересна.

Заранее спасибо! smile.gif

Автор: Alone 7.10.2004, 13:31
для создания потребуется:
- текстовый файлик манифест (к примеру Manifest.txt)
в котором описан главный класс (тот который стартует)
file Manifest.txt
Код

Main-class: pbx/pbxMain


Далее вызываем команду jar <options> <file.jar> <manifest> <files>
примерно вот так
jar -cfm MyProg.jar Manifest.txt MyClass1.class MyClass2.class
где:
-с создать архив jar
-f указать имя файла архива(MyProg.jar)
-m добавить информацию из манифест файла
далее идут файлы для добавления в архив.
Можно указать -С каталог_с файлами

Ниже приведу мой скрипт для сборки проекта
Код

#!/bin/sh

echo "Clean project"
rm -f pbx/*.class

echo "Clean old jar files"
rm -f *.jar
echo "Compile project"
javac -g:none -O pbx/*.java

echo "Create jar file"
jar -cfm pbx.jar manifest pbx/*.class img/* snd/*

echo "Sign jar file with .keystore"
jarsigner  -keystore .keystore -storepass secret pbx.jar "pbxKey"

echo "Get MANIFEST.MF from jar file"
unzip pbx.jar META-INF/MANIFEST.MF
zip -d pbx.jar META-INF/MANIFEST.MF

echo "Modify MANIFEST.MF"
echo "Main-class: pbx/pbxMain" > MANIFEST.MF
cat META-INF/MANIFEST.MF >> MANIFEST.MF
mv -f MANIFEST.MF META-INF/

echo "Update META-INF/MANIFEST.MF into jar file"
zip -u pbx.jar META-INF/MANIFEST.MF

echo "Cleaning..."
rm -drf META-INF

echo "Clean project"
rm -f pbx/*.class



Тут есть один хитрый трюк...
После подписывания архива - jarsigner затирает оригинальный manifest, который я ему подсовывал. Пришлось выуживать файл Manifest из архива, изменять его и ложить обратно.
Но это потребуется лишь в том случае, когда надо будет подписывать апплет

Автор: polosatij 7.10.2004, 14:06
sdelal vs'e', kak napisano..
ne poluchaetsja ... sad.gif


ja ne vizhu v manifeste nazvanie startujushego klassa. Vot manifest posle ego obrabotki jar-om..

MANIFEST.MF
Код


Manifest-Version: 1.0
Created-By: 1.4.1_02 (Sun Microsystems Inc.)



u menja j2sdk1.4.1_02. Krome togo, v file.jar obrazuetsja papki s putem C:\Documente und ... \Administrator\... i t.d do mainClass.class. Tak dolzhno byt'?

file.jar sozdaetsja.. no ne zapuskaetsja pri dvojnom shelchke!
pri starte file.jar v "cmd.exe" nichego ne proishodit.. prosto perehod zanogo k stroke
C:\>


hmmmm.... hmmm.gif

Автор: Domestic Cat 7.10.2004, 15:11
Посмотри еще здесь:

http://www.cs.princeton.edu/introcs/85application/jar/jar.html

Если все равно не получается, советую стянуть ant и разобраться с ним, он сам может jar архивы делать.

Автор: Alone 7.10.2004, 16:41
а манифест не знает какой класс стартующий... Это ты сам должен его туда прописать!

Автор: AntonSaburov 7.10.2004, 17:29
Цитата(Alone @ 7.10.2004, 17:41)
а манифест не знает какой класс стартующий... Это ты сам должен его туда прописать!

Золотые слова smile.gif
Самому надо такие штуки прописывать. Или использовать настройки IDE (если ты ее юзаешь). Некоторые такое помогают делать.

Автор: Zandr 8.10.2004, 07:24
Гы smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif smile.gif
Есть фишка одна для файлов, которые добавляются к манифесту smile.gif
Каждая значащая строка должна оканчиваться переводом строки.
Т.е. создаешь файл, набираешь строчку Main-Class: MyClassWithMAINMethod жмешь на Enter, сохраняешь его (например как mf) Потом что-то типа jar -cfm My.jar mf *. Имеет значение в каком порядке идут буковки f и m в параметрах:
jar -cmf mf my.jar *
но:
jar -cfm my.jar mf *

Автор: Alone 8.10.2004, 12:00
верно. поэтому для порядку - лучче указывать <ключ> <параметр>
типа jar -c -m mf -f file etc...
а насчет первода строки - абсолютно верно! Это как "отче наш" помнить надо smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)