Я скачал jgit, упакованный в файл sh, и запустил его в mingw. Я видел в списке процессов, что процесс Java был запущен только с основным классом и параметрами

"c:\Program Files\Java\jdk1.6.0_26\bin\java.exe" org.eclipse.jgit.pgm.Main diff master

Я проверил текущую директорию процесса на распакованный основной класс, ничего не было! Где находится основной класс в файловой системе?

1 ответ1

1

Он устанавливает путь класса к пути к файлу .sh в строке 88 файла .sh .

this_script=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && this_script="$0"
cp=$this_script

[...]

CLASSPATH="$cp"
export CLASSPATH

Нет необходимости "распаковывать" основной класс.


Он использует хитрость, чтобы объединить сценарий оболочки и фактические данные JAR/ZIP в одном файле: он использует тот факт, что центральная структура данных файла ZIP находится в его конце. Читатель файла zip/jar просто о сценарии оболочки "garbage data" в начале.

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

Пока код сценария оболочки exit до того, как начнутся фактические данные zip/jar , оболочка не заботится о "мусорных данных" после части файла сценария оболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .