Mac下打包Jar文件的一些坑

        今天突然心血来潮,想把我的“Hallo World”程序打包成Jar文件。先贴一下代码:

package com.example;
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

        先编译(假设你有JDK,没有的话安装,安装方法:http://blog.zicode.com/?p=35):
javac Main.java

        这时,你的Class文件就出来了。运行:
java Main.class

        输出:
Hello World!

        这时,我们要开始我们今天的主题了。首先,我们运行:
jar -cvf Main.jar Main.class

        运行:
java -jar Main.jar

        报错:找不到或无法加载主类。怎么办?上网Google!找到了解决办法:Jar包中的META-INF里的MANIFEST.MF文件有问题。下面给出解决办法:
mkdir unpress
cp Main.jar unpress/
cd unpress/
jar -xf Main.jar
cd META-INF/
vim MANIFEST.MF

        在文件的最后,加上
Main-Class: Main

        记住,最后一定要留个空行。
jar -cMf Main.jar .

        把Main.jar移到上层目录去,最后把unpress目录删掉。这时,又报错:找不到或无法加载主类: Main。再次Google,发现是包惹的祸。重来一遍,把MANIFEST.MF里的“Main-Class: Main”改成“Main-Class: com/example/Main”。
        这时,又报错:找不到或无法加载主类: com/example/Main,彻底崩溃了。得知,又是包惹的祸,索性把Main.jar删了,重新来过。
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

        添加:
Main-Class: com/example/Main

        继续:
jar -cMf Main.jar .

        把Main.jar移到上层目录去,并把unpress目录删掉。
        这回终于成功了。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

返回顶部