Почему я могу выполнять JAR-файлы непосредственно из Bash? - PullRequest
5 голосов
/ 12 ноября 2010

Я давний парень по Java и знаю, что способ запустить JAR с основным классом, на который есть ссылка в файле MANIFEST.MF внутри Jar, очень прост:

java -jar theJar.jar

Я использовал это для запуска сервера Fabric3 (содержится в bin/server.jar в его стандартном выпуске).Я заметил, что когда я распаковал его из дистрибутива дистрибутива, он был помечен как исполняемый.По какой-то причине я попытался

./server.jar

из моей командной строки bash (bash версия 4.1.5 в Ubuntu 10.10), и вот, сервер запустилсякак будто я набрал обычную команду java -jar ....JAR структурирован как обычный JAR;Я выполнил head, и в первых нескольких байтах не было команды #!, поэтому bash не должен волшебным образом знать, чтобы запустить виртуальную машину Java с ним, верно?Или эта версия bash расширила способность правильно запускать JAR с правильным манифестом?Пытливые умы хотят знать ...

Ответы [ 2 ]

12 голосов
/ 12 ноября 2010

Это может вообще не быть функцией bash. Если вы используете Linux (как вы отметили), у вас может быть модуль ядра binfmt_misc, который немного творит волшебство, когда вы пытаетесь выполнить программу. По сути, это расширяет двоичные форматы, которые linux может выполнять, просто добавив некоторые пользовательские форматы с достаточным количеством инструкций для их запуска.

2 голосов
/ 12 ноября 2010

Эта странная способность выросла не в bash, а в вашем ядре, а именно в модуле binfmt_misc .(Есть также некоторая документация, относящаяся к Java )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...