我是一个长期的Java人员,并且知道使用Jar中MANIFEST.MF
文件中引用的主类运行JAR的方法很简单:
java -jar theJar.jar
我正在使用它来启动Fabric3服务器(在其标准发行版中包含在bin/server.jar
中)。我注意到当我从分发tarball解压缩它时,它被标记为可执行文件。一时兴起,我试过
./server.jar
来自我的bash
命令行(Ubuntu 10.10中的bash
版本4.1.5),并且看,服务器启动就像我输入了正常的java -jar ...
命令一样。 JAR的结构类似于普通的JAR;我在它上面做了head
,前几个字节中没有#!
命令,所以bash
不应该神奇地知道用它启动Java VM,对吧?或者这个版本的bash
是否能够正确启动具有适当清单的JAR?询问心灵想知道......
答案 0 :(得分:12)
这可能不是bash的特征。如果您正在运行linux(因为已标记),那么当您尝试执行程序时,您可能拥有binfmt_misc
内核模块,这会产生一些魔力。基本上它的作用是它扩展了linux可以从elf执行的二进制格式,还包括一些用户定义的格式,并有足够的指令来运行它们。
答案 1 :(得分:2)
这不是增长这种奇怪能力的bash - 它是你的内核,特别是模块binfmt_misc。 (还有一些documentation specific to Java)