Mac下打包Jar文件的一些坑
今天突然心血来潮,想把我的“Hallo World”程序打包成Jar文件。先贴一下代码: [java] package com.example; public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } [/java] 先编译(假设你有JDK,没有的话安装,安装方法:http://blog.zicode.com/?p=35): [bash] javac Main.java [/bash] 这时,你的Class文件就出来了。运行: [bash] java Main.class [/bash] 输出: [bash] Hello World! [/bash] 这时,我们要开始我们今天的主题了。首先,我们运行: [bash] jar -cvf Main.jar Main.class [/bash] 运行: [bash] java -jar Main.jar [/bash] 报错:找不到或无法加载主类。怎么办?上网Google!找到了解决办法:Jar包中的META-INF里的MANIFEST.MF文件有问题。下面给出解决办法: [bash] mkdir unpress cp Main.jar unpress/ cd unpress/ jar -xf Main.jar cd META-INF/ vim MANIFEST.MF [/bash] 在文件的最后,加上 [bash] Main-Class: Main [/bash] 记住,最后一定要留个空行。 [bash] jar -cMf Main.jar . [/bash] 把Main.jar移到上层目录去,最后把unpress目录删掉。这时,又报错:找不到或无法加载主类: Main。再次Google,发现是包惹的祸。重来一遍,把MANIFEST.MF里的“Main-Class: Main”改成“Main-Class: com/example/Main”。 这时,又报错:找不到或无法加载主类: com/example/Main,彻底崩溃了。得知,又是包惹的祸,索性把Main.jar删了,重新来过。 [bash] pwd #输出:你的目录/ ls #输出: #com/ ls com/ #输出: #example/ jar -cvf Main.jar com/example/Main.class mkdir unpress cp Main.jar unpress/ cd unpress/ jar -xf Main.jar cd META-INF/ vim MANIFEST.MF [/bash] 添加: [bash] Main-Class: com/example/Main [/bash] 继续: [bash] jar -cMf Main.jar . [/bash] 把Main.jar移到上层目录去,并把unpress目录删掉。 这回终于成功了。