首页 / 软件开发 / JAVA / 使不能运行的JAR文件可以使用java -jar运行
使不能运行的JAR文件可以使用java -jar运行2011-01-02ljdrer摘要本文展示如何将不可运行的JAR变为可运行的,并且不用直接操作manifest文件。你将学会开发一个短小的程序使得任何JAR文件都可以使用java -jar命令或者通过在像Windows上双击而运行。你可以将一个应用的所有类和资源打包到一个JAR文件中。实际上,那就是jar文件的一个目的。另外一个目的是让用户可以非常容易的执行存储在JAR文件中的应用,那么为什么当他们可以成为一等公民而和本机可执行程序等同的时候,我们为什么要让他们只承担包的功能而成为java世界中的二等公民呢?要执行一个jar文件,你可以使用java命令的-jar选项。例如你有一个可运行的文件名为myjar.jar的JAR文件,因为它是可运行的,你可以像这样执行它:java -jar myjar.jar另外,当JRE安装在像Windows这样的操作系统上时,将jar文件和JVM关联后你就可以双击他们运行应用了。这些JAR必须是可运行的。问题是:你如何让一个JAR是可运行的?manifest文件和Main-Class条目在大部分JAR文件中,META-INF目录下会有一个MANIFEST.MF文件,在那个文件中有一个特殊的条目Main-Class,它告诉java -jar命令去执行那么类。问题是你必须自己恰当的将这个特殊条目加到manifest文件中:它必须位于特定的位置并且必须符合特定的格式,然而有些人不喜欢编辑配置文件。让API帮你做从Java 1.2开始引人的java.util.jar包可以让你操作jar文件(注意:它建立在java.util.zip包的基础上)。更确切的说法是,java.util.jar可以让你通过Manifest类非常容易的操作那个特殊的manifest文件。让我们编写一个程序使用那个API。首先这个程序必须知道三件事情:1. 我们希望可以执行的JAR2. 我们希望执行的主类(这个类必须存在于JAR内)3. 新的JAR文件的文件名,因为我们不应该简单的覆盖那些文件编写程序上面的列表将会构成我们的程序的参数,基于这一点,让我们为这个应用挑选一个合适的名字。MakeJarRunnable听起来如何?检查main的参数假设我们的main入口是一个标准的main(String[])方法,我们首先应该检查程序的参数:if (args.length != 3) {
System.out.println("Usage: MakeJarRunnable "
+ "<jar file> <Main-Class> <output>");
System.exit(0);
}请注意参数列表是如何被解释的,因为这对于后面的代码是非常重要的。参数的顺序和内容并不是硬性设置的,但是如果你改变它们也要记得适当的修改其他的代码。访问JAR和它的manifest文件首先我们必须创建一些知道JAR和manifest文件的对象://Create the JarInputStream object, and get its manifest
JarInputStream jarIn = new JarInputStream(new FileInputStream(args[0]));
Manifest manifest = jarIn.getManifest();
if (manifest == null) {
//This will happen if no manifest exists
manifest = new Manifest();
}