快速业务通道

使不能运行的JAR文件可以使用java -jar运行 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
xit    if (oldMainClass != null) {      System.out.println("Warning: old Main-Class value is: "               + oldMainClass);      System.exit(1);    }

输出新的JAR

我们需要创建一个新的jar文件,因为我们必须使用JarOutputStream类。注意我们必须保证没有将输入作为输出使用。作为替代,也许程序应该考虑两个jar文件相同并且提示用户是否覆盖原来的。然而我将这个保留给读者作为练习。

System.out.println("Writing to " + args[2] + "...");    JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(args[2]),                          manifest);

我们必须将原来的JAR中的每个条目都写到新的JAR中,因为对那些条目迭代:

//Create a read buffer to transfer data from the input    byte[] buf = new byte[4096];    //Iterate the entries    JarEntry entry;    while ((entry = jarIn.getNextJarEntry()) != null) {      //Exclude the manifest file from the old JAR    if ("META-INF/MANIFEST.MF".equals(entry.getName())) continue;    //Write the entry to the output JAR    jarOut.putNextEntry(entry);      int read;      while ((read = jarIn.read(buf)) != -1) {        jarOut.write(buf, 0, read);      }    jarOut.closeEntry();    }    //Flush and close all the streams    jarOut.flush();    jarOut.close();    jarIn.close();

完整程序

当然我们必须将这些代码放到一个类里面的main方法里面,并且具有合适的import声明。

使用范例

让我们用一个范例来使用这个程序。假设你有一个应用其main入口点是类HelloRunnableWorld(这个是它的全类名,也就是包含包名),同样假设你已经创建了一个名字为myjar.jar的JAR,包含整个应用。对于这个jar,我们像这样运行MakeJarRunnable:

java MakeJarRunnable myjar.jar HelloRunnableWorld myjar_r.jar

再强调一次,就像早先提到的,注意参数列表的顺序。如果忘记了顺序,以无参的形式运行程序它就会告诉你使用信息。

使用java -jar命令运行myjar.jar和myjar_r.jar,注意它们的差异。完成这些之后,查看一下它们的manifest文件(META-INF/MANIFEST.MF)。

这里有一个建议:将MakeJarRunnable制作成一个可以运行的JAR!

运行它

通过双击一个JAR或者使用简单的命令总是比将它包含在你的classpath并运行特定的main类方便。为了帮助你作到这一点,JAR规范为JAR的manifest文件提供了一个Main-Class属性。我在这里提出的这个程序让你利用Java的JAR API非常容易的操作这个属性并制作你自己的可运行的JAR。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号